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/ModelDocument.py
CHANGED
|
@@ -3,12 +3,15 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
'''
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
import os, io
|
|
6
|
+
import regex as re
|
|
6
7
|
from collections import defaultdict
|
|
8
|
+
from pathlib import Path
|
|
7
9
|
from typing import Any
|
|
8
10
|
from lxml import etree
|
|
9
11
|
from xml.sax import SAXParseException
|
|
10
12
|
from arelle import (PackageManager, XbrlConst, XmlUtil, UrlUtil, ValidateFilingText,
|
|
11
13
|
XhtmlValidate, XmlValidateSchema, FunctionIxt)
|
|
14
|
+
from arelle.conformance.CSVTestcaseLoader import CSVTestcaseException, loadCsvTestcase
|
|
12
15
|
from arelle.FileSource import FileSource
|
|
13
16
|
from arelle.ModelObject import ModelObject
|
|
14
17
|
from arelle.ModelValue import qname
|
|
@@ -17,12 +20,14 @@ from arelle.ModelInstanceObject import ModelFact
|
|
|
17
20
|
from arelle.ModelObjectFactory import parser
|
|
18
21
|
from arelle.PrototypeDtsObject import LinkPrototype, LocPrototype, ArcPrototype, DocumentPrototype, PrototypeElementTree
|
|
19
22
|
from arelle.PluginManager import pluginClassMethods
|
|
20
|
-
from arelle.PythonUtil import OrderedDefaultDict, normalizeSpace
|
|
23
|
+
from arelle.PythonUtil import OrderedDefaultDict, isLegacyAbs, normalizeSpace
|
|
21
24
|
from arelle.XhtmlValidate import ixMsgCode
|
|
22
25
|
from arelle.XmlValidateConst import VALID
|
|
23
26
|
from arelle.XmlValidate import validate as xmlValidate, lxmlSchemaValidate
|
|
24
27
|
from arelle.ModelTestcaseObject import ModelTestcaseVariation
|
|
25
28
|
|
|
29
|
+
urlMatchPattern = re.compile("^https?://(?:www.)?(xbrl.org)/(.*)$") # for checking allowable schemaLocation mismatches
|
|
30
|
+
|
|
26
31
|
creationSoftwareNames = None
|
|
27
32
|
|
|
28
33
|
def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDiscovered=False, isIncluded=None, isSupplemental=False, namespace=None, reloadCache=False, **kwargs) -> ModelDocument | None:
|
|
@@ -48,6 +53,7 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
48
53
|
:type reloadCache: bool
|
|
49
54
|
:param checkModifiedTime: True if desired to check modifed time of web cached entry point (ahead of usual time stamp checks).
|
|
50
55
|
:type checkModifiedTime: bool
|
|
56
|
+
:param entrypoint (in kwargs) might contain securityClassification ("unclassified", "confidential", "secret", etc)
|
|
51
57
|
"""
|
|
52
58
|
|
|
53
59
|
if referringElement is None: # used for error messages
|
|
@@ -72,10 +78,10 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
72
78
|
modelXbrl.uriDir = os.path.dirname(modelXbrl.uriDir)
|
|
73
79
|
if modelXbrl.modelManager.validateDisclosureSystem and \
|
|
74
80
|
not normalizedUri.startswith(modelXbrl.uriDir) and \
|
|
75
|
-
not modelXbrl.modelManager.disclosureSystem.
|
|
81
|
+
not modelXbrl.modelManager.disclosureSystem.hrefValidForDisclosureSystem(normalizedUri):
|
|
76
82
|
blocked = modelXbrl.modelManager.disclosureSystem.blockDisallowedReferences
|
|
77
83
|
if normalizedUri not in modelXbrl.urlUnloadableDocs:
|
|
78
|
-
# HMRC note, HMRC.blockedFile should be in this list if
|
|
84
|
+
# HMRC note, HMRC.blockedFile should be in this list if uk-taxonomies.xml is maintained an dup to date
|
|
79
85
|
modelXbrl.error(("EFM.6.22.00", "GFM.1.1.3", "SBR.NL.2.1.0.06" if normalizedUri.startswith("http") else "SBR.NL.2.2.0.17"),
|
|
80
86
|
_("Prohibited file for filings %(blockedIndicator)s: %(url)s"),
|
|
81
87
|
edgarCode="cp-2200-Prohibited-Href-Or-Schema-Location",
|
|
@@ -99,7 +105,7 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
99
105
|
mappedUri = modelXbrl.modelManager.disclosureSystem.mappedUrl(normalizedUri)
|
|
100
106
|
|
|
101
107
|
if isEntry:
|
|
102
|
-
modelXbrl.entryLoadingUrl = mappedUri # for error
|
|
108
|
+
modelXbrl.entryLoadingUrl = mappedUri # for error logging during loading
|
|
103
109
|
|
|
104
110
|
# don't try reloading if not loadable
|
|
105
111
|
|
|
@@ -130,9 +136,9 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
130
136
|
isPullLoadable = any(pluginMethod(modelXbrl, mappedUri, normalizedUri, filepath, isEntry=isEntry, namespace=namespace, **kwargs)
|
|
131
137
|
for pluginMethod in pluginClassMethods("ModelDocument.IsPullLoadable"))
|
|
132
138
|
|
|
133
|
-
if not isPullLoadable and os.path.splitext(filepath)[1] in (".xlsx", ".xls"
|
|
139
|
+
if not isPullLoadable and os.path.splitext(filepath)[1] in (".xlsx", ".xls"):
|
|
134
140
|
modelXbrl.error("FileNotLoadable",
|
|
135
|
-
_("File can not be loaded, requires loadFromExcel
|
|
141
|
+
_("File can not be loaded, requires loadFromExcel plug-in: %(fileName)s"),
|
|
136
142
|
modelObject=referringElement, fileName=normalizedUri)
|
|
137
143
|
return None
|
|
138
144
|
|
|
@@ -148,6 +154,20 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
148
154
|
return None
|
|
149
155
|
if modelDocument is not None:
|
|
150
156
|
return modelDocument
|
|
157
|
+
if Path(filepath).suffix == ".csv":
|
|
158
|
+
try:
|
|
159
|
+
modelDocument = loadCsvTestcase(modelXbrl, normalizedUri)
|
|
160
|
+
if modelDocument is not None:
|
|
161
|
+
return modelDocument
|
|
162
|
+
except CSVTestcaseException:
|
|
163
|
+
modelDocument = None
|
|
164
|
+
from arelle.oim.Load import isOimLoadable, oimLoader
|
|
165
|
+
if isOimLoadable(normalizedUri, filepath):
|
|
166
|
+
modelDocument = oimLoader(modelXbrl, normalizedUri, filepath)
|
|
167
|
+
if isinstance(modelDocument, Exception):
|
|
168
|
+
return None
|
|
169
|
+
if modelDocument is not None:
|
|
170
|
+
return modelDocument
|
|
151
171
|
if (modelXbrl.modelManager.validateDisclosureSystem and (
|
|
152
172
|
(isEntry and modelXbrl.modelManager.disclosureSystem.validateEntryText) or
|
|
153
173
|
(modelXbrl.modelManager.disclosureSystem.validateFileText and
|
|
@@ -171,6 +191,20 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
171
191
|
fileName=os.path.basename(uri),
|
|
172
192
|
error=error.message, line=error.line, column=error.column)
|
|
173
193
|
file.close()
|
|
194
|
+
except FileNotFoundError as err:
|
|
195
|
+
if file:
|
|
196
|
+
file.close()
|
|
197
|
+
msg = _("Could not load file from local filesystem.")
|
|
198
|
+
offlineMode = modelXbrl.modelManager.cntlr.webCache.workOffline
|
|
199
|
+
if offlineMode:
|
|
200
|
+
msg += _(" Disable offline mode to attempt download.")
|
|
201
|
+
msg += " file: %(url)s"
|
|
202
|
+
modelXbrl.error("IOerror", msg,
|
|
203
|
+
modelObject=referringElement, url=uri, error=str(err))
|
|
204
|
+
if modelXbrl.modelManager.abortOnMajorError and (isEntry or isDiscovered):
|
|
205
|
+
raise LoadingException() from err
|
|
206
|
+
modelXbrl.urlUnloadableDocs[normalizedUri] = True # not loadable due to IO issue
|
|
207
|
+
return None
|
|
174
208
|
except (EnvironmentError, KeyError, UnicodeDecodeError) as err: # missing zip file raises KeyError
|
|
175
209
|
if file:
|
|
176
210
|
file.close()
|
|
@@ -210,10 +244,15 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
210
244
|
modelObject=(referringElement, os.path.basename(uri)), fileName=os.path.basename(uri), error=str(err))
|
|
211
245
|
return None
|
|
212
246
|
except Exception as err:
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
247
|
+
if len(err.args) >= 2 and err.args[0] == "rpe:unsupportedFileExtension":
|
|
248
|
+
modelXbrl.error(err.args[0],
|
|
249
|
+
_("Unsupported file extension for zip contents: %(fileName)s"),
|
|
250
|
+
modelObject=referringElement, fileName=os.path.basename(uri))
|
|
251
|
+
else:
|
|
252
|
+
modelXbrl.error(type(err).__name__,
|
|
253
|
+
_("Unrecoverable error: %(error)s, %(fileName)s"),
|
|
254
|
+
modelObject=referringElement, fileName=os.path.basename(uri),
|
|
255
|
+
error=str(err), exc_info=True)
|
|
217
256
|
modelXbrl.urlUnloadableDocs[normalizedUri] = True # not loadable due to exception issue
|
|
218
257
|
return None
|
|
219
258
|
|
|
@@ -241,9 +280,13 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
241
280
|
if otherModelDoc.basename == os.path.basename(uri):
|
|
242
281
|
if os.path.normpath(otherModelDoc.uri) != os.path.normpath(uri): # tolerate \ vs / or ../ differences
|
|
243
282
|
modelXbrl.urlDocs[uri] = otherModelDoc
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
283
|
+
# tolerate certain schemaLocation mismatches
|
|
284
|
+
m1 = urlMatchPattern.match(otherModelDoc.uri)
|
|
285
|
+
m2 = urlMatchPattern.match(uri)
|
|
286
|
+
if not (m1 and m2 and m1.groups() == m2.groups()):
|
|
287
|
+
modelXbrl.warning("info:duplicatedSchema",
|
|
288
|
+
_("Schema file with same targetNamespace %(targetNamespace)s loaded from %(fileName)s and %(otherFileName)s"),
|
|
289
|
+
modelObject=referringElement, targetNamespace=targetNamespace, fileName=uri, otherFileName=otherModelDoc.uri)
|
|
247
290
|
return otherModelDoc
|
|
248
291
|
elif (isEntry or isDiscovered or isSupplemental) and ns == XbrlConst.link:
|
|
249
292
|
if ln == "linkbase":
|
|
@@ -376,6 +419,9 @@ def load(modelXbrl, uri, base=None, referringElement=None, isEntry=False, isDisc
|
|
|
376
419
|
if referencedDoc.type == Type.SCHEMA:
|
|
377
420
|
modelDocument.targetDocumentSchemaRefs.add(doc.relativeUri(referencedDoc.uri))
|
|
378
421
|
|
|
422
|
+
if (kwargs.get("entrypoint") or {}).get("securityClassification"):
|
|
423
|
+
modelDocument.securityClassification = kwargs["entrypoint"]["securityClassification"]
|
|
424
|
+
|
|
379
425
|
if isEntry or isSupplemental:
|
|
380
426
|
# re-order base set keys for entry point or supplemental linkbase addition
|
|
381
427
|
modelXbrl.baseSets = OrderedDefaultDict( # order by linkRole, arcRole of key
|
|
@@ -400,7 +446,7 @@ def loadSchemalocatedSchema(modelXbrl, element, relativeUrl, namespace, baseUrl)
|
|
|
400
446
|
doc.inDTS = False
|
|
401
447
|
return doc
|
|
402
448
|
|
|
403
|
-
def create(modelXbrl, type, uri, schemaRefs=None, isEntry=False, initialXml=None, initialComment=None, base=None, discover=True, documentEncoding="utf-8", xbrliNamespacePrefix=None) -> ModelDocument:
|
|
449
|
+
def create(modelXbrl, type, uri, schemaRefs=None, isEntry=False, initialXml=None, initialComment=None, base=None, discover=True, documentEncoding="utf-8", xbrliNamespacePrefix=None, entrypoint=None) -> ModelDocument:
|
|
404
450
|
"""Returns a new modelDocument, created from scratch, with any necessary header elements
|
|
405
451
|
|
|
406
452
|
(such as the schema, instance, or RSS feed top level elements)
|
|
@@ -424,7 +470,7 @@ def create(modelXbrl, type, uri, schemaRefs=None, isEntry=False, initialXml=None
|
|
|
424
470
|
if initialComment:
|
|
425
471
|
initialComment = "<!--" + initialComment + "-->"
|
|
426
472
|
# XML document has nsmap root element to replace nsmap as new xmlns entries are required
|
|
427
|
-
if initialXml and type in (Type.INSTANCE, Type.SCHEMA, Type.LINKBASE, Type.RSSFEED):
|
|
473
|
+
if initialXml and type in (Type.INSTANCE, Type.SCHEMA, Type.LINKBASE, Type.RSSFEED, Type.TESTCASE):
|
|
428
474
|
Xml = '<nsmap>{}{}</nsmap>'.format(initialComment or '', initialXml or '')
|
|
429
475
|
elif type == Type.INSTANCE:
|
|
430
476
|
# modelXbrl.uriDir = os.path.dirname(normalizedUri)
|
|
@@ -492,6 +538,7 @@ def create(modelXbrl, type, uri, schemaRefs=None, isEntry=False, initialXml=None
|
|
|
492
538
|
modelDocument.isQualifiedElementFormDefault = False
|
|
493
539
|
modelDocument.isQualifiedAttributeFormDefault = False
|
|
494
540
|
modelDocument.definesUTR = False
|
|
541
|
+
modelDocument.entrypoint = entrypoint
|
|
495
542
|
return modelDocument
|
|
496
543
|
|
|
497
544
|
class Type:
|
|
@@ -596,7 +643,7 @@ fractionParts = {"{http://www.xbrl.org/2003/instance}numerator",
|
|
|
596
643
|
|
|
597
644
|
class ModelDocument:
|
|
598
645
|
"""
|
|
599
|
-
.. class::
|
|
646
|
+
.. class:: ModelDocument(modelXbrl, type, uri, filepath, xmlDocument)
|
|
600
647
|
|
|
601
648
|
The modelDocument performs discovery and initialization when loading documents.
|
|
602
649
|
For instances, schema and linkbase references are resolved, as well as non-DTS schema locations needed
|
|
@@ -678,11 +725,15 @@ class ModelDocument:
|
|
|
678
725
|
Qualifies as a discovered schema per XBRL 2.1
|
|
679
726
|
"""
|
|
680
727
|
|
|
728
|
+
# The document encoding. The XML declaration is stripped from the document
|
|
729
|
+
# before lxml parses the document making the lxml DocInfo encoding unreliable.
|
|
681
730
|
documentEncoding: str
|
|
731
|
+
entrypoint: dict[str, Any] | None
|
|
682
732
|
xmlRootElement: Any
|
|
683
733
|
targetXbrlRootElement: ModelObject
|
|
684
734
|
|
|
685
735
|
def __init__(self, modelXbrl, type, uri, filepath, xmlDocument):
|
|
736
|
+
self.entrypoint = None
|
|
686
737
|
self.modelXbrl = modelXbrl
|
|
687
738
|
self.skipDTS = modelXbrl.skipDTS
|
|
688
739
|
self.type = type
|
|
@@ -779,7 +830,7 @@ class ModelDocument:
|
|
|
779
830
|
except AttributeError:
|
|
780
831
|
pass
|
|
781
832
|
|
|
782
|
-
def save(self, overrideFilepath=None, outputZip=None, outputFile=None, updateFileHistory=True, encoding="utf-8", **kwargs) -> None:
|
|
833
|
+
def save(self, overrideFilepath=None, outputZip=None, outputFile=None, updateFileHistory=True, encoding="utf-8", zipDir=None, **kwargs) -> None:
|
|
783
834
|
"""Saves current document file.
|
|
784
835
|
|
|
785
836
|
:param overrideFilepath: specify to override saving in instance's modelDocument.filepath
|
|
@@ -793,7 +844,7 @@ class ModelDocument:
|
|
|
793
844
|
XmlUtil.writexml(fh, self.xmlDocument, encoding=encoding, **kwargs)
|
|
794
845
|
if outputZip:
|
|
795
846
|
fh.seek(0)
|
|
796
|
-
outputZip.writestr(os.path.basename(overrideFilepath or self.filepath),fh.read())
|
|
847
|
+
outputZip.writestr((zipDir or "") + os.path.basename(overrideFilepath or self.filepath),fh.read())
|
|
797
848
|
if outputFile is None:
|
|
798
849
|
fh.close()
|
|
799
850
|
if overrideFilepath:
|
|
@@ -874,11 +925,48 @@ class ModelDocument:
|
|
|
874
925
|
return self._creationSoftwareComment
|
|
875
926
|
|
|
876
927
|
@property
|
|
877
|
-
def creationSoftware(self):
|
|
928
|
+
def creationSoftware(self) -> str:
|
|
929
|
+
"""
|
|
930
|
+
Extract software product name from root level comment elements.
|
|
931
|
+
If no comment text is found, returns string "None".
|
|
932
|
+
If no software product name is found, returns the comment text.
|
|
933
|
+
If any software product names are found, returns the first.
|
|
934
|
+
:return: Extracted text.
|
|
935
|
+
"""
|
|
936
|
+
text = self.creationSoftwareComment
|
|
937
|
+
if not text:
|
|
938
|
+
return "None"
|
|
939
|
+
matches = self.creationSoftwareMatches(text)
|
|
940
|
+
if len(matches) > 0:
|
|
941
|
+
return matches[0]
|
|
942
|
+
return text
|
|
943
|
+
|
|
944
|
+
def creationSoftwareMatches(self, text: str | None) -> list[str]:
|
|
945
|
+
"""
|
|
946
|
+
Given text, extract software product names.
|
|
947
|
+
If explicit pattern ("Software Credit: ...") is matched, only
|
|
948
|
+
returns those matches.
|
|
949
|
+
Otherwise, will check against a table of known software names and patterns.
|
|
950
|
+
Interested parties can add to the table by opening a pull request,
|
|
951
|
+
or by sending a request via email to support@arelle.org.
|
|
952
|
+
:param text:
|
|
953
|
+
:return: List of matched software names in order found.
|
|
954
|
+
"""
|
|
955
|
+
matches = []
|
|
956
|
+
if text is None:
|
|
957
|
+
return matches
|
|
958
|
+
import regex as re
|
|
959
|
+
creditPattern = re.compile(r'Software Credit: (.*)', re.IGNORECASE)
|
|
960
|
+
for line in text.split('\n'):
|
|
961
|
+
if creditPattern.search(line):
|
|
962
|
+
creditMatch = creditPattern.sub(r'\1', line).strip()
|
|
963
|
+
matches.append(creditMatch)
|
|
964
|
+
if matches:
|
|
965
|
+
return matches
|
|
966
|
+
|
|
878
967
|
global creationSoftwareNames
|
|
879
968
|
if creationSoftwareNames is None:
|
|
880
969
|
import json
|
|
881
|
-
import regex as re
|
|
882
970
|
creationSoftwareNames = []
|
|
883
971
|
try:
|
|
884
972
|
with io.open(os.path.join(self.modelXbrl.modelManager.cntlr.configDir, "creationSoftwareNames.json"),
|
|
@@ -890,13 +978,11 @@ class ModelDocument:
|
|
|
890
978
|
self.modelXbrl.error("arelle:creationSoftwareNamesTable",
|
|
891
979
|
_("Error loading creation software names table %(error)s"),
|
|
892
980
|
modelObject=self, error=ex)
|
|
893
|
-
creationSoftwareComment = self.creationSoftwareComment
|
|
894
|
-
if not creationSoftwareComment:
|
|
895
|
-
return "None"
|
|
896
981
|
for productKey, productNamePattern in creationSoftwareNames:
|
|
897
|
-
if productNamePattern.search(
|
|
898
|
-
|
|
899
|
-
|
|
982
|
+
if productNamePattern.search(text):
|
|
983
|
+
matches.append(productKey)
|
|
984
|
+
return matches # Each document only matches on software name
|
|
985
|
+
return matches
|
|
900
986
|
|
|
901
987
|
@property
|
|
902
988
|
def processingInstructions(self):
|
|
@@ -1023,7 +1109,7 @@ class ModelDocument:
|
|
|
1023
1109
|
break # break because it is now absolute
|
|
1024
1110
|
baseElt = baseElt.getparent()
|
|
1025
1111
|
if base: # neither None nor ''
|
|
1026
|
-
if base.startswith('http://') or
|
|
1112
|
+
if base.startswith('http://') or isLegacyAbs(base):
|
|
1027
1113
|
return base
|
|
1028
1114
|
else:
|
|
1029
1115
|
return os.path.dirname(self.uri) + "/" + base
|
|
@@ -1183,6 +1269,8 @@ class ModelDocument:
|
|
|
1183
1269
|
linkrole = XbrlConst.defaultLinkRole
|
|
1184
1270
|
#index by both arcrole and linkrole#arcrole and dimensionsions if applicable
|
|
1185
1271
|
baseSetKeys = [(arcrole, linkrole, linkQn, arcQn)]
|
|
1272
|
+
baseSetKeys.append((arcrole, linkrole, linkQn, None))
|
|
1273
|
+
baseSetKeys.append((arcrole, linkrole, None, arcQn))
|
|
1186
1274
|
baseSetKeys.append((arcrole, linkrole, None, None))
|
|
1187
1275
|
baseSetKeys.append((arcrole, None, None, None))
|
|
1188
1276
|
if XbrlConst.isDimensionArcrole(arcrole) and not dimensionArcFound:
|
|
@@ -1279,9 +1367,9 @@ class ModelDocument:
|
|
|
1279
1367
|
modelObject=undefFacts,
|
|
1280
1368
|
elements=", ".join(sorted(set(str(f.prefixedName) for f in undefFacts))))
|
|
1281
1369
|
|
|
1282
|
-
def contextDiscover(self, modelContext) -> None:
|
|
1370
|
+
def contextDiscover(self, modelContext, setTargetModelXbrl=False) -> None:
|
|
1283
1371
|
if not self.skipDTS:
|
|
1284
|
-
xmlValidate(self.modelXbrl, modelContext) # validation may have not completed due to errors elsewhere
|
|
1372
|
+
xmlValidate(self.modelXbrl, modelContext, setTargetModelXbrl=setTargetModelXbrl) # validation may have not completed due to errors elsewhere
|
|
1285
1373
|
id = modelContext.id
|
|
1286
1374
|
self.modelXbrl.contexts[id] = modelContext
|
|
1287
1375
|
for container in (("{http://www.xbrl.org/2003/instance}segment", modelContext.segDimValues, modelContext.segNonDimValues),
|
|
@@ -1293,7 +1381,11 @@ class ModelDocument:
|
|
|
1293
1381
|
if sElt.namespaceURI == XbrlConst.xbrldi and sElt.localName in ("explicitMember","typedMember"):
|
|
1294
1382
|
dimQn = sElt.dimensionQname
|
|
1295
1383
|
if dimQn: # may be null if schema error omits dimension element
|
|
1296
|
-
#
|
|
1384
|
+
if setTargetModelXbrl: # ixds possibly-shared context
|
|
1385
|
+
if hasattr(sElt, "_dimension") and sElt._dimension is None:
|
|
1386
|
+
del sElt._dimension
|
|
1387
|
+
if hasattr(sElt, "_member") and sElt._member is None:
|
|
1388
|
+
del sElt._member
|
|
1297
1389
|
modelContext.qnameDims[dimQn] = sElt # both seg and scen
|
|
1298
1390
|
if not self.skipDTS:
|
|
1299
1391
|
dimension = sElt.dimension
|
|
@@ -1304,9 +1396,9 @@ class ModelDocument:
|
|
|
1304
1396
|
else:
|
|
1305
1397
|
containerNonDimValues.append(sElt)
|
|
1306
1398
|
|
|
1307
|
-
def unitDiscover(self, unitElement) -> None:
|
|
1399
|
+
def unitDiscover(self, unitElement, setTargetModelXbrl=False) -> None:
|
|
1308
1400
|
if not self.skipDTS:
|
|
1309
|
-
xmlValidate(self.modelXbrl, unitElement) # validation may have not completed due to errors elsewhere
|
|
1401
|
+
xmlValidate(self.modelXbrl, unitElement, setTargetModelXbrl=setTargetModelXbrl) # validation may have not completed due to errors elsewhere
|
|
1310
1402
|
self.modelXbrl.units[unitElement.id] = unitElement
|
|
1311
1403
|
|
|
1312
1404
|
def inlineXbrlDiscover(self, htmlElement):
|
|
@@ -1401,7 +1493,7 @@ class ModelDocument:
|
|
|
1401
1493
|
doc = load(self.modelXbrl, uriAttr, base=base, referringElement=testcaseElement)
|
|
1402
1494
|
self.addDocumentReference(doc, "testcaseIndex", testcaseElement)
|
|
1403
1495
|
|
|
1404
|
-
def testcaseDiscover(self, testcaseElement, validateTestcaseSchema):
|
|
1496
|
+
def testcaseDiscover(self, testcaseElement: etree._Element, validateTestcaseSchema: bool) -> None:
|
|
1405
1497
|
if validateTestcaseSchema:
|
|
1406
1498
|
lxmlSchemaValidate(self)
|
|
1407
1499
|
isTransformTestcase = testcaseElement.namespaceURI == "http://xbrl.org/2011/conformance-rendering/transforms"
|
|
@@ -1458,13 +1550,13 @@ class ModelDocument:
|
|
|
1458
1550
|
# inline document set level compilation
|
|
1459
1551
|
# modelIxdsDocument is an inlineDocumentSet or entry inline document (if not a document set)
|
|
1460
1552
|
# note that multi-target and multi-instance facts may have html elements belonging to primary ixds instead of this instance ixds
|
|
1461
|
-
def inlineIxdsDiscover(modelXbrl, modelIxdsDocument):
|
|
1553
|
+
def inlineIxdsDiscover(modelXbrl, modelIxdsDocument, setTargetModelXbrl=False, **kwargs):
|
|
1462
1554
|
for pluginMethod in pluginClassMethods("ModelDocument.SelectIxdsTarget"):
|
|
1463
|
-
pluginMethod(modelXbrl, modelIxdsDocument)
|
|
1555
|
+
pluginMethod(modelXbrl, modelIxdsDocument, **kwargs)
|
|
1464
1556
|
# extract for a single target document
|
|
1465
1557
|
ixdsTarget = getattr(modelXbrl, "ixdsTarget", None)
|
|
1466
1558
|
# compile inline result set
|
|
1467
|
-
ixdsEltById = defaultdict(list)
|
|
1559
|
+
ixdsEltById = modelXbrl.ixdsEltById = defaultdict(list)
|
|
1468
1560
|
for htmlElement in modelXbrl.ixdsHtmlElements:
|
|
1469
1561
|
for elt in htmlElement.iterfind(".//*[@id]"):
|
|
1470
1562
|
if isinstance(elt,ModelObject) and elt.id:
|
|
@@ -1516,8 +1608,12 @@ def inlineIxdsDiscover(modelXbrl, modelIxdsDocument):
|
|
|
1516
1608
|
for modelInlineFact in htmlElement.iterdescendants(ixNStag + "nonNumeric", ixNStag + "nonFraction", ixNStag + "fraction"):
|
|
1517
1609
|
if isinstance(modelInlineFact,ModelObject):
|
|
1518
1610
|
_target = modelInlineFact.get("target")
|
|
1519
|
-
|
|
1520
|
-
|
|
1611
|
+
contextRef = modelInlineFact.get("contextRef")
|
|
1612
|
+
if contextRef is not None:
|
|
1613
|
+
factTargetContextRefs[_target].add(contextRef.strip())
|
|
1614
|
+
unitRef = modelInlineFact.get("unitRef")
|
|
1615
|
+
if unitRef is not None:
|
|
1616
|
+
factTargetUnitRefs[_target].add(unitRef.strip())
|
|
1521
1617
|
if modelInlineFact.id:
|
|
1522
1618
|
factsByFactID[modelInlineFact.id] = modelInlineFact
|
|
1523
1619
|
for elt in htmlElement.iterdescendants(tag=ixNStag + "continuation"):
|
|
@@ -1609,24 +1705,58 @@ def inlineIxdsDiscover(modelXbrl, modelIxdsDocument):
|
|
|
1609
1705
|
for _target in sourceFactTargets:
|
|
1610
1706
|
targetRoleUris[_target].add(footnoteRole)
|
|
1611
1707
|
|
|
1708
|
+
for htmlElement in modelXbrl.ixdsHtmlElements:
|
|
1709
|
+
# Discover iXBRL 1.0 footnote roles and arcroles.
|
|
1710
|
+
iXBRL1_0Footnotes = list(htmlElement.iterdescendants(tag=XbrlConst.qnIXbrlFootnote.clarkNotation))
|
|
1711
|
+
if not iXBRL1_0Footnotes:
|
|
1712
|
+
continue
|
|
1713
|
+
footnoteRefElems = (
|
|
1714
|
+
XbrlConst.qnIXbrlFraction.clarkNotation,
|
|
1715
|
+
XbrlConst.qnIXbrlNonFraction.clarkNotation,
|
|
1716
|
+
XbrlConst.qnIXbrlNonNumeric.clarkNotation,
|
|
1717
|
+
XbrlConst.qnIXbrlTuple.clarkNotation,
|
|
1718
|
+
)
|
|
1719
|
+
targetsByFootnoteId = defaultdict(set)
|
|
1720
|
+
for elem in htmlElement.iterdescendants(footnoteRefElems):
|
|
1721
|
+
if isinstance(elem, ModelObject):
|
|
1722
|
+
refs = elem.get("footnoteRefs")
|
|
1723
|
+
if refs:
|
|
1724
|
+
_target = elem.get("target")
|
|
1725
|
+
for footnoteRef in refs.split():
|
|
1726
|
+
targetsByFootnoteId[footnoteRef].add(_target)
|
|
1727
|
+
for modelInlineFootnote in iXBRL1_0Footnotes:
|
|
1728
|
+
arcrole = modelInlineFootnote.get("arcrole", XbrlConst.factFootnote)
|
|
1729
|
+
footnoteLinkRole = modelInlineFootnote.get("footnoteLinkRole", XbrlConst.defaultLinkRole)
|
|
1730
|
+
footnoteRole = modelInlineFootnote.get("footnoteRole")
|
|
1731
|
+
for _target in targetsByFootnoteId[modelInlineFootnote.footnoteID]:
|
|
1732
|
+
targetRoleUris[_target].add(footnoteLinkRole)
|
|
1733
|
+
targetArcroleUris[_target].add(arcrole)
|
|
1734
|
+
if footnoteRole:
|
|
1735
|
+
targetRoleUris[_target].add(footnoteRole)
|
|
1736
|
+
|
|
1737
|
+
contextRefs = factTargetContextRefs[ixdsTarget]
|
|
1738
|
+
contextRefsForAllTargets = {ref for refs in factTargetContextRefs.values() for ref in refs}
|
|
1739
|
+
unitRefs = factTargetUnitRefs[ixdsTarget]
|
|
1740
|
+
unitRefsForAllTargets = {ref for refs in factTargetUnitRefs.values() for ref in refs}
|
|
1741
|
+
|
|
1612
1742
|
# discovery of contexts, units and roles which are used by target document
|
|
1613
1743
|
for htmlElement in modelXbrl.ixdsHtmlElements:
|
|
1614
1744
|
mdlDoc = htmlElement.modelDocument
|
|
1615
1745
|
ixNStag = mdlDoc.ixNStag
|
|
1616
1746
|
|
|
1617
1747
|
for inlineElement in htmlElement.iterdescendants(tag=ixNStag + "resources"):
|
|
1618
|
-
contextRefs = factTargetContextRefs[ixdsTarget]
|
|
1619
|
-
allContextRefs = set.union(*factTargetContextRefs.values())
|
|
1620
|
-
unitRefs = factTargetUnitRefs[ixdsTarget]
|
|
1621
|
-
allUnitRefs = set.union(*factTargetUnitRefs.values())
|
|
1622
1748
|
for elt in inlineElement.iterchildren("{http://www.xbrl.org/2003/instance}context"):
|
|
1623
|
-
|
|
1624
|
-
if
|
|
1625
|
-
modelIxdsDocument.contextDiscover(elt)
|
|
1749
|
+
contextId = elt.get("id")
|
|
1750
|
+
if contextId in contextRefs:
|
|
1751
|
+
modelIxdsDocument.contextDiscover(elt, setTargetModelXbrl)
|
|
1752
|
+
elif contextId not in contextRefsForAllTargets:
|
|
1753
|
+
modelXbrl.ixdsUnmappedContexts[contextId] = elt
|
|
1626
1754
|
for elt in inlineElement.iterchildren("{http://www.xbrl.org/2003/instance}unit"):
|
|
1627
|
-
|
|
1628
|
-
if
|
|
1629
|
-
modelIxdsDocument.unitDiscover(elt)
|
|
1755
|
+
unitId = elt.get("id")
|
|
1756
|
+
if unitId in unitRefs:
|
|
1757
|
+
modelIxdsDocument.unitDiscover(elt, setTargetModelXbrl)
|
|
1758
|
+
elif unitId not in unitRefsForAllTargets:
|
|
1759
|
+
modelXbrl.ixdsUnmappedUnits[unitId] = elt
|
|
1630
1760
|
for refElement in inlineElement.iterchildren("{http://www.xbrl.org/2003/linkbase}roleRef"):
|
|
1631
1761
|
r = refElement.get("roleURI")
|
|
1632
1762
|
if r in targetRoleUris[ixdsTarget]:
|
|
@@ -1751,6 +1881,8 @@ def inlineIxdsDiscover(modelXbrl, modelIxdsDocument):
|
|
|
1751
1881
|
checkTupleIxDescendants(tupleFact, childElt)
|
|
1752
1882
|
|
|
1753
1883
|
def addItemFactToTarget(modelInlineFact):
|
|
1884
|
+
if setTargetModelXbrl:
|
|
1885
|
+
modelInlineFact.targetModelXbrl = modelXbrl # fact's owning IXDS overrides initial loading document IXDS
|
|
1754
1886
|
if modelInlineFact.concept is None:
|
|
1755
1887
|
modelXbrl.error(ixMsgCode("missingReferences", modelInlineFact, name="references", sect="validation"),
|
|
1756
1888
|
_("Instance fact missing schema definition: %(qname)s of Inline Element %(localName)s"),
|
arelle/ModelDtsObject.py
CHANGED
|
@@ -22,7 +22,7 @@ objects to interface to SQL-obtained data.
|
|
|
22
22
|
|
|
23
23
|
ModelType represents an anonymous or explicit element type. It includes methods that determine
|
|
24
24
|
the base XBRL type (such as monetaryItemType), the base XML type (such as decimal), substitution
|
|
25
|
-
group chains,
|
|
25
|
+
group chains, facets, and attributes.
|
|
26
26
|
|
|
27
27
|
ModelAttributeGroup and ModelAttribute provide sufficient mechanism to identify element attributes,
|
|
28
28
|
their types, and their default or fixed values.
|
|
@@ -468,6 +468,15 @@ class ModelConcept(ModelNamableTerm, ModelParticle):
|
|
|
468
468
|
self._isNumeric = XbrlConst.isNumericXsdType(self.baseXsdType)
|
|
469
469
|
return self._isNumeric
|
|
470
470
|
|
|
471
|
+
@property
|
|
472
|
+
def isDecimal(self):
|
|
473
|
+
"""(bool) -- True for a decimal xsd base type (not including xbrl fractions, float or double)"""
|
|
474
|
+
try:
|
|
475
|
+
return self._isDecimal
|
|
476
|
+
except AttributeError:
|
|
477
|
+
self._isDecimal = XbrlConst.isDecimalXsdType(self.baseXsdType)
|
|
478
|
+
return self._isDecimal
|
|
479
|
+
|
|
471
480
|
@property
|
|
472
481
|
def isInteger(self):
|
|
473
482
|
"""(bool) -- True for elements of, or derived from, integer base type (not including fractionItemType)"""
|
|
@@ -747,10 +756,10 @@ class ModelConcept(ModelNamableTerm, ModelParticle):
|
|
|
747
756
|
def isEnumeration2Item(self):
|
|
748
757
|
"""(bool) -- True if derived from enum2 item types"""
|
|
749
758
|
try:
|
|
750
|
-
return self.
|
|
759
|
+
return self._isEnum2
|
|
751
760
|
except AttributeError:
|
|
752
|
-
self.
|
|
753
|
-
return self.
|
|
761
|
+
self._isEnum2 = self.instanceOfType(XbrlConst.qnEnumeration2ItemTypes)
|
|
762
|
+
return self._isEnum2
|
|
754
763
|
|
|
755
764
|
@property
|
|
756
765
|
def enumDomainQname(self):
|
|
@@ -1116,11 +1125,11 @@ class ModelType(ModelNamableTerm):
|
|
|
1116
1125
|
self._baseXsdType = "XBRLI_PRECISIONUNION"
|
|
1117
1126
|
elif self.qname == XbrlConst.qnXbrliNonZeroDecimalUnion:
|
|
1118
1127
|
self._baseXsdType = "XBRLI_NONZERODECIMAL"
|
|
1128
|
+
elif self.qname.namespaceURI == XbrlConst.xsd:
|
|
1129
|
+
self._baseXsdType = self.qname.localName
|
|
1119
1130
|
else:
|
|
1120
1131
|
qnameDerivedFrom = self.qnameDerivedFrom
|
|
1121
1132
|
if qnameDerivedFrom is None:
|
|
1122
|
-
# want None if base type has no content (not mixed content, TBD)
|
|
1123
|
-
#self._baseXsdType = "anyType"
|
|
1124
1133
|
self._baseXsdType = "noContent"
|
|
1125
1134
|
elif isinstance(qnameDerivedFrom,list): # union
|
|
1126
1135
|
if qnameDerivedFrom == XbrlConst.qnDateUnionXsdTypes:
|
|
@@ -1399,7 +1408,7 @@ class ModelType(ModelNamableTerm):
|
|
|
1399
1408
|
("QName", self.qname),
|
|
1400
1409
|
("xsd type", self.baseXsdType),
|
|
1401
1410
|
("derived from", self.qnameDerivedFrom),
|
|
1402
|
-
("
|
|
1411
|
+
("facets", self.facets))
|
|
1403
1412
|
|
|
1404
1413
|
def __repr__(self):
|
|
1405
1414
|
return ("modelType[{0}, qname: {1}, derivedFrom: {2}, {3}, line {4}]"
|
|
@@ -1681,6 +1690,7 @@ class RelationStatus:
|
|
|
1681
1690
|
INEFFECTIVE = 4
|
|
1682
1691
|
|
|
1683
1692
|
arcCustAttrsExclusions = {XbrlConst.xlink, "use","priority","order","weight","preferredLabel"}
|
|
1693
|
+
modelObjectAttrs = frozenset(dir(ModelObject))
|
|
1684
1694
|
|
|
1685
1695
|
class ModelRelationship(ModelObject):
|
|
1686
1696
|
"""
|
|
@@ -1712,10 +1722,15 @@ class ModelRelationship(ModelObject):
|
|
|
1712
1722
|
.. attribute:: toModelObject
|
|
1713
1723
|
|
|
1714
1724
|
ModelObject of the xlink:to (dereferenced if via xlink:locator)
|
|
1725
|
+
|
|
1726
|
+
.. attribute:: linkrole
|
|
1727
|
+
|
|
1728
|
+
Value of xlink:role attribute of parent extended link element
|
|
1715
1729
|
"""
|
|
1716
1730
|
def __init__(self, modelDocument, arcElement, fromModelObject, toModelObject):
|
|
1717
1731
|
# copy model object properties from arcElement
|
|
1718
1732
|
self.arcElement = arcElement
|
|
1733
|
+
self.linkrole = arcElement.getparent().get("{http://www.w3.org/1999/xlink}role")
|
|
1719
1734
|
self.init(modelDocument)
|
|
1720
1735
|
self.fromModelObject = fromModelObject
|
|
1721
1736
|
self.toModelObject = toModelObject
|
|
@@ -1832,7 +1847,7 @@ class ModelRelationship(ModelObject):
|
|
|
1832
1847
|
|
|
1833
1848
|
@property
|
|
1834
1849
|
def orderDecimal(self):
|
|
1835
|
-
"""(decimal) -- Value of xlink:order attribute, NaN if not
|
|
1850
|
+
"""(decimal) -- Value of xlink:order attribute, NaN if not convertible to float, or None if not specified"""
|
|
1836
1851
|
try:
|
|
1837
1852
|
return decimal.Decimal(self.order)
|
|
1838
1853
|
except decimal.InvalidOperation:
|
|
@@ -1923,11 +1938,6 @@ class ModelRelationship(ModelObject):
|
|
|
1923
1938
|
varName = self.variablename
|
|
1924
1939
|
return ModelValue.qname(self.arcElement, varName, noPrefixIsNoNamespace=True) if varName else None
|
|
1925
1940
|
|
|
1926
|
-
@property
|
|
1927
|
-
def linkrole(self):
|
|
1928
|
-
"""(str) -- Value of xlink:role attribute of parent extended link element"""
|
|
1929
|
-
return self.arcElement.getparent().get("{http://www.w3.org/1999/xlink}role")
|
|
1930
|
-
|
|
1931
1941
|
@property
|
|
1932
1942
|
def linkQname(self):
|
|
1933
1943
|
"""(QName) -- qname of the parent extended link element"""
|
|
@@ -1998,19 +2008,9 @@ class ModelRelationship(ModelObject):
|
|
|
1998
2008
|
return self._isCovered
|
|
1999
2009
|
|
|
2000
2010
|
@property
|
|
2001
|
-
def
|
|
2002
|
-
"""(str) -- Value of
|
|
2003
|
-
|
|
2004
|
-
return self._tableAxis
|
|
2005
|
-
except AttributeError:
|
|
2006
|
-
aType = (self.get("axis") or # XII 2013
|
|
2007
|
-
self.get("axisDisposition") or # XII 2011
|
|
2008
|
-
self.get("axisType")) # Eurofiling
|
|
2009
|
-
if aType in ("xAxis","x"): self._axisDisposition = "x"
|
|
2010
|
-
elif aType in ("yAxis","y"): self._axisDisposition = "y"
|
|
2011
|
-
elif aType in ("zAxis","z"): self._axisDisposition = "z"
|
|
2012
|
-
else: self._axisDisposition = None
|
|
2013
|
-
return self._axisDisposition
|
|
2011
|
+
def axis(self):
|
|
2012
|
+
"""(str) -- Value of axis (on applicable table linkbase arcs)"""
|
|
2013
|
+
return self.get("axis")
|
|
2014
2014
|
|
|
2015
2015
|
@property
|
|
2016
2016
|
def equivalenceHash(self): # not exact, use equivalenceKey if hashes are the same
|
|
@@ -2065,7 +2065,7 @@ class ModelRelationship(ModelObject):
|
|
|
2065
2065
|
def propertyView(self):
|
|
2066
2066
|
return self.toModelObject.propertyView + \
|
|
2067
2067
|
(("arcrole", self.arcrole),
|
|
2068
|
-
("weight", self.weight) if self.arcrole
|
|
2068
|
+
("weight", self.weight) if self.arcrole in XbrlConst.summationItems else (),
|
|
2069
2069
|
("preferredLabel", self.preferredLabel) if self.arcrole == XbrlConst.parentChild and self.preferredLabel else (),
|
|
2070
2070
|
("contextElement", self.contextElement) if self.arcrole in (XbrlConst.all, XbrlConst.notAll) else (),
|
|
2071
2071
|
("typedDomain", self.toModelObject.typedDomainElement.qname)
|
|
@@ -2087,6 +2087,11 @@ class ModelRelationship(ModelObject):
|
|
|
2087
2087
|
self.toModelObject.qname if isinstance(self.toModelObject, ModelObject) else "??",
|
|
2088
2088
|
self.modelDocument.basename, self.sourceline))
|
|
2089
2089
|
|
|
2090
|
+
def __dir__(self):
|
|
2091
|
+
# Ignore ModelObject attributes because most relate to the underlying lxml element,
|
|
2092
|
+
# which ModelRelationship does not have.
|
|
2093
|
+
return [a for a in object.__dir__(self) if a.startswith('__') or a not in modelObjectAttrs]
|
|
2094
|
+
|
|
2090
2095
|
@property
|
|
2091
2096
|
def viewConcept(self):
|
|
2092
2097
|
if isinstance(self.toModelObject, ModelConcept):
|