arelle-release 2.37.64__py3-none-any.whl → 2.37.65__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.
Potentially problematic release.
This version of arelle-release might be problematic. Click here for more details.
- arelle/UrlUtil.py +3 -0
- arelle/ValidateFilingText.py +3 -3
- arelle/_version.py +2 -2
- arelle/plugin/validate/DBA/rules/__init__.py +2 -2
- arelle/plugin/validate/EDINET/rules/gfm.py +70 -2
- arelle/plugin/validate/EDINET/rules/upload.py +66 -0
- arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +5 -0
- arelle/plugin/validate/ESEF/ESEF_2021/Image.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +3 -3
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +5 -0
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +23 -2
- arelle/plugin/validate/ESEF/resources/authority-validations.json +28 -4
- arelle/utils/validate/ESEFImage.py +3 -3
- {arelle_release-2.37.64.dist-info → arelle_release-2.37.65.dist-info}/METADATA +1 -1
- {arelle_release-2.37.64.dist-info → arelle_release-2.37.65.dist-info}/RECORD +19 -19
- {arelle_release-2.37.64.dist-info → arelle_release-2.37.65.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.64.dist-info → arelle_release-2.37.65.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.64.dist-info → arelle_release-2.37.65.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.64.dist-info → arelle_release-2.37.65.dist-info}/top_level.txt +0 -0
arelle/UrlUtil.py
CHANGED
|
@@ -31,6 +31,9 @@ def authority(url: str, includeScheme: bool=True) -> str:
|
|
|
31
31
|
def scheme(url: str) -> str | None: # returns None if no scheme part
|
|
32
32
|
return (url or "").rpartition(":")[0] or None
|
|
33
33
|
|
|
34
|
+
def isExternalUrl(url: str) -> bool:
|
|
35
|
+
return scheme(url) in ("http", "https", "ftp")
|
|
36
|
+
|
|
34
37
|
absoluteUrlPattern = None
|
|
35
38
|
# http://www.ietf.org/rfc/rfc2396.txt section 4.3
|
|
36
39
|
# this pattern doesn't allow some valid unicode characters
|
arelle/ValidateFilingText.py
CHANGED
|
@@ -13,7 +13,7 @@ from arelle.PythonUtil import isLegacyAbs
|
|
|
13
13
|
from arelle.XbrlConst import ixbrlAll, xhtml
|
|
14
14
|
from arelle.XmlUtil import setXmlns, xmlstring, xmlDeclarationPattern, XmlDeclarationLocationException
|
|
15
15
|
from arelle.ModelObject import ModelObject
|
|
16
|
-
from arelle.UrlUtil import decodeBase64DataImage, isHttpUrl, scheme
|
|
16
|
+
from arelle.UrlUtil import decodeBase64DataImage, isExternalUrl, isHttpUrl, scheme
|
|
17
17
|
|
|
18
18
|
XMLpattern = re.compile(r".*(<|<|<|<)[A-Za-z_]+[A-Za-z0-9_:]*[^>]*(/>|>|>|/>).*", re.DOTALL)
|
|
19
19
|
CDATApattern = re.compile(r"<!\[CDATA\[(.+)\]\]")
|
|
@@ -631,7 +631,7 @@ def validateTextBlockFacts(modelXbrl):
|
|
|
631
631
|
attribute=attrTag, element=eltTag)
|
|
632
632
|
elif eltTag == "a" and (not allowedExternalHrefPattern or allowedExternalHrefPattern.match(attrValue)):
|
|
633
633
|
pass
|
|
634
|
-
elif
|
|
634
|
+
elif isExternalUrl(attrValue):
|
|
635
635
|
modelXbrl.error(("EFM.6.05.16.externalReference", "FERC.6.05.16.externalReference"),
|
|
636
636
|
_("Fact %(fact)s of context %(contextID)s has an invalid external reference in '%(attribute)s' for <%(element)s>"),
|
|
637
637
|
modelObject=f1, fact=f1.qname, contextID=f1.contextID,
|
|
@@ -773,7 +773,7 @@ def validateHtmlContent(modelXbrl, referenceElt, htmlEltTree, validatedObjectLab
|
|
|
773
773
|
messageCodes=("EFM.6.05.34.activeContent", "EFM.5.02.05.activeContent", "FERC.6.05.34.activeContent", "FERC.5.02.05.activeContent"))
|
|
774
774
|
elif eltTag == "a" and (not allowedExternalHrefPattern or allowedExternalHrefPattern.match(attrValue)):
|
|
775
775
|
pass
|
|
776
|
-
elif
|
|
776
|
+
elif isExternalUrl(attrValue):
|
|
777
777
|
modelXbrl.error(messageCodePrefix + "externalReference",
|
|
778
778
|
_("%(validatedObjectLabel)s has an invalid external reference in '%(attribute)s' for <%(element)s>: %(value)s"),
|
|
779
779
|
modelObject=elt, validatedObjectLabel=validatedObjectLabel,
|
arelle/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.37.
|
|
32
|
-
__version_tuple__ = version_tuple = (2, 37,
|
|
31
|
+
__version__ = version = '2.37.65'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 37, 65)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -14,7 +14,7 @@ from arelle.ModelInstanceObject import ModelFact
|
|
|
14
14
|
from arelle.ModelValue import QName
|
|
15
15
|
from arelle.ModelXbrl import ModelXbrl
|
|
16
16
|
from arelle.typing import TypeGetText
|
|
17
|
-
from arelle.UrlUtil import
|
|
17
|
+
from arelle.UrlUtil import isExternalUrl
|
|
18
18
|
from arelle.utils.Contexts import ContextHashKey
|
|
19
19
|
from arelle.utils.validate.Validation import Validation
|
|
20
20
|
from arelle.ValidateFilingText import parseImageDataURL
|
|
@@ -73,7 +73,7 @@ def errorOnForbiddenImage(
|
|
|
73
73
|
"""
|
|
74
74
|
invalidImages = []
|
|
75
75
|
for image in images:
|
|
76
|
-
if
|
|
76
|
+
if isExternalUrl(image):
|
|
77
77
|
invalidImages.append(image)
|
|
78
78
|
elif image.startswith("data:image"):
|
|
79
79
|
dataURLParts = parseImageDataURL(image)
|
|
@@ -3,13 +3,14 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
import contextlib
|
|
6
7
|
from collections import defaultdict
|
|
7
8
|
from datetime import timedelta
|
|
8
9
|
from typing import Any, cast, Iterable
|
|
9
10
|
|
|
10
11
|
import regex
|
|
11
12
|
|
|
12
|
-
from arelle import ModelDocument, XbrlConst, XmlUtil
|
|
13
|
+
from arelle import ModelDocument, UrlUtil, XbrlConst, XmlUtil
|
|
13
14
|
from arelle.HtmlUtil import attrValue
|
|
14
15
|
from arelle.LinkbaseType import LinkbaseType
|
|
15
16
|
from arelle.ModelDtsObject import ModelConcept
|
|
@@ -1272,7 +1273,6 @@ def rule_gfm_1_4_4(
|
|
|
1272
1273
|
GFM 1.4.4: The xlink:role attribute of an element with a type="extended" attribute or a
|
|
1273
1274
|
type="resource" attribute must be present and must not be empty.
|
|
1274
1275
|
"""
|
|
1275
|
-
|
|
1276
1276
|
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
1277
1277
|
if pluginData.isStandardTaxonomyUrl(modelDocument.uri, val.modelXbrl):
|
|
1278
1278
|
continue
|
|
@@ -1289,6 +1289,74 @@ def rule_gfm_1_4_4(
|
|
|
1289
1289
|
)
|
|
1290
1290
|
|
|
1291
1291
|
|
|
1292
|
+
@validation(
|
|
1293
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1294
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
1295
|
+
)
|
|
1296
|
+
def rule_gfm_1_4_6(
|
|
1297
|
+
pluginData: PluginValidationDataExtension,
|
|
1298
|
+
val: ValidateXbrl,
|
|
1299
|
+
*args: Any,
|
|
1300
|
+
**kwargs: Any,
|
|
1301
|
+
) -> Iterable[Validation]:
|
|
1302
|
+
"""
|
|
1303
|
+
EDINET.EC5700W: [GFM 1.4.6] Please correct the value of the link:arcroleRef attribute to
|
|
1304
|
+
one specified in the XBRL 2.1 specification or the EDINET taxonomy.
|
|
1305
|
+
GFM 1.4.6: The text preceding a sharp sign "#" in an xlink:href attribute of link:arcroleRef must
|
|
1306
|
+
be a standard taxonomy or in a file recognised in the disclosure system.
|
|
1307
|
+
"""
|
|
1308
|
+
|
|
1309
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
1310
|
+
if pluginData.isStandardTaxonomyUrl(modelDocument.uri, val.modelXbrl):
|
|
1311
|
+
continue
|
|
1312
|
+
rootElt = modelDocument.xmlRootElement
|
|
1313
|
+
for elt in rootElt.iter(XbrlConst.qnLinkArcroleRef.clarkNotation):
|
|
1314
|
+
refUri = elt.get("arcroleURI")
|
|
1315
|
+
hrefAttr = elt.get(XbrlConst.qnXlinkHref.clarkNotation)
|
|
1316
|
+
hrefUri, hrefId = UrlUtil.splitDecodeFragment(hrefAttr)
|
|
1317
|
+
if hrefUri not in val.disclosureSystem.standardTaxonomiesDict:
|
|
1318
|
+
yield Validation.warning(
|
|
1319
|
+
codes='EDINET.EC5700W.GFM.1.4.6',
|
|
1320
|
+
msg=_("Please correct the value of the link:arcroleRef attribute to one specified in the XBRL 2.1 specification or the EDINET taxonomy."
|
|
1321
|
+
" link:arcroleRef: %(xlinkHref)s, arcrole: %(refURI)s,"),
|
|
1322
|
+
modelObject=elt,
|
|
1323
|
+
refURI=refUri,
|
|
1324
|
+
xlinkHref=hrefUri
|
|
1325
|
+
)
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
@validation(
|
|
1329
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1330
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
1331
|
+
)
|
|
1332
|
+
def rule_gfm_1_4_8(
|
|
1333
|
+
pluginData: PluginValidationDataExtension,
|
|
1334
|
+
val: ValidateXbrl,
|
|
1335
|
+
*args: Any,
|
|
1336
|
+
**kwargs: Any,
|
|
1337
|
+
) -> Iterable[Validation]:
|
|
1338
|
+
"""
|
|
1339
|
+
EDINET.EC5700W: [GFM 1.4.8] Correct the priority attribute value so that it is less than 10.
|
|
1340
|
+
"""
|
|
1341
|
+
|
|
1342
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
1343
|
+
if pluginData.isStandardTaxonomyUrl(modelDocument.uri, val.modelXbrl):
|
|
1344
|
+
continue
|
|
1345
|
+
rootElt = modelDocument.xmlRootElement
|
|
1346
|
+
ns = {'xlink': 'http://www.w3.org/1999/xlink'}
|
|
1347
|
+
for elt in rootElt.xpath('//*[@xlink:type="arc"][@priority]', namespaces=ns):
|
|
1348
|
+
priority = elt.get("priority")
|
|
1349
|
+
with contextlib.suppress(ValueError, TypeError):
|
|
1350
|
+
if int(priority) >= 10:
|
|
1351
|
+
yield Validation.warning(
|
|
1352
|
+
codes='EDINET.EC5700W.GFM.1.4.8',
|
|
1353
|
+
msg=_("Correct the priority attribute value so that it is less than 10. Arc element: %(arcName)s, priority: %(priority)s"),
|
|
1354
|
+
arcName=elt.qname,
|
|
1355
|
+
modelObject=elt,
|
|
1356
|
+
priority=priority,
|
|
1357
|
+
)
|
|
1358
|
+
|
|
1359
|
+
|
|
1292
1360
|
@validation(
|
|
1293
1361
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1294
1362
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -11,6 +11,7 @@ from typing import Any, Iterable, TYPE_CHECKING
|
|
|
11
11
|
from arelle import UrlUtil, XbrlConst
|
|
12
12
|
from arelle.Cntlr import Cntlr
|
|
13
13
|
from arelle.FileSource import FileSource
|
|
14
|
+
from arelle.ModelDocument import Type as ModelDocumentType
|
|
14
15
|
from arelle.ModelInstanceObject import ModelFact
|
|
15
16
|
from arelle.ModelObject import ModelObject
|
|
16
17
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
@@ -1098,6 +1099,71 @@ def rule_EC1031E(
|
|
|
1098
1099
|
)
|
|
1099
1100
|
|
|
1100
1101
|
|
|
1102
|
+
@validation(
|
|
1103
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1104
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
1105
|
+
)
|
|
1106
|
+
def rule_EC8023W(
|
|
1107
|
+
pluginData: PluginValidationDataExtension,
|
|
1108
|
+
val: ValidateXbrl,
|
|
1109
|
+
*args: Any,
|
|
1110
|
+
**kwargs: Any,
|
|
1111
|
+
) -> Iterable[Validation]:
|
|
1112
|
+
"""
|
|
1113
|
+
EDINET.EC8023W: In IXBRL files, 'nonFraction' elements should be immediately preceded by
|
|
1114
|
+
'△' if and only if the sign attribute is '-'.
|
|
1115
|
+
|
|
1116
|
+
* Tagging using International Financial Reporting Standards taxonomy elements is not checked.
|
|
1117
|
+
* Tagging using Japanese GAAP notes or IFRS financial statement filer-specific additional elements
|
|
1118
|
+
may be identified as an exception and a warning displayed, even if the data content is correct.
|
|
1119
|
+
"""
|
|
1120
|
+
negativeFactXpath = """
|
|
1121
|
+
//ix:nonFraction[@sign="-"][
|
|
1122
|
+
(preceding-sibling::text()[1] and normalize-space(preceding-sibling::text()[1]) != '△')
|
|
1123
|
+
or
|
|
1124
|
+
not(preceding-sibling::text()[1])
|
|
1125
|
+
]
|
|
1126
|
+
"""
|
|
1127
|
+
postiveFactXpath = """
|
|
1128
|
+
//ix:nonFraction[
|
|
1129
|
+
not(@sign="-")
|
|
1130
|
+
and
|
|
1131
|
+
(
|
|
1132
|
+
(preceding-sibling::text()[1] and normalize-space(preceding-sibling::text()[1]) = '△')
|
|
1133
|
+
)
|
|
1134
|
+
]
|
|
1135
|
+
"""
|
|
1136
|
+
for doc in val.modelXbrl.urlDocs.values():
|
|
1137
|
+
if doc.type != ModelDocumentType.INLINEXBRL:
|
|
1138
|
+
continue
|
|
1139
|
+
if not pluginData.isExtensionUri(doc.uri, val.modelXbrl):
|
|
1140
|
+
continue
|
|
1141
|
+
nsmap = {
|
|
1142
|
+
'ix': XbrlConst.ixbrl
|
|
1143
|
+
}
|
|
1144
|
+
for elt in doc.xmlRootElement.xpath(negativeFactXpath, namespaces=nsmap):
|
|
1145
|
+
if elt.qname.namespaceURI == pluginData.jpigpNamespace:
|
|
1146
|
+
continue
|
|
1147
|
+
yield Validation.error(
|
|
1148
|
+
codes='EDINET.EC8023W',
|
|
1149
|
+
msg=_("In an inline XBRL file, if the sign attribute of the ix:nonFraction "
|
|
1150
|
+
"element is set to \"-\" (minus), you must set \"△\" immediately "
|
|
1151
|
+
"before the ix:nonFraction element tag."),
|
|
1152
|
+
modelObject=elt,
|
|
1153
|
+
)
|
|
1154
|
+
for elt in doc.xmlRootElement.xpath(postiveFactXpath, namespaces=nsmap):
|
|
1155
|
+
if elt.qname.namespaceURI == pluginData.jpigpNamespace:
|
|
1156
|
+
continue
|
|
1157
|
+
yield Validation.error(
|
|
1158
|
+
codes='EDINET.EC8023W',
|
|
1159
|
+
msg=_("In an inline XBRL file, if the sign attribute of the ix:nonFraction "
|
|
1160
|
+
"element is not set to \"-\" (minus), there is no need to set \"△\" "
|
|
1161
|
+
"immediately before the ix:nonFraction element tag."),
|
|
1162
|
+
modelObject=elt,
|
|
1163
|
+
)
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
|
|
1101
1167
|
@validation(
|
|
1102
1168
|
hook=ValidationHook.FILESOURCE,
|
|
1103
1169
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -348,6 +348,11 @@ def checkFilingDTS(
|
|
|
348
348
|
val.modelXbrl.error("ESEF.3.1.1.linkbasesNotSeparateFiles",
|
|
349
349
|
_("Each linkbase type MUST be provided in a separate linkbase file, found: %(linkbasesFound)s."),
|
|
350
350
|
modelObject=modelDocument.xmlRootElement, linkbasesFound=", ".join(sorted(linkbasesFound)))
|
|
351
|
+
# As per ESEF conformance test case TC2_invalid, also output an extensionTaxonomyWrongFilesStructure error
|
|
352
|
+
val.modelXbrl.error("ESEF.3.1.1.extensionTaxonomyWrongFilesStructure",
|
|
353
|
+
_("Each linkbase type MUST be provided in a separate linkbase file, please check file %(documentName)s."),
|
|
354
|
+
modelObject=modelDocument.xmlRootElement,
|
|
355
|
+
documentName=modelDocument.basename)
|
|
351
356
|
|
|
352
357
|
# check for any prohibiting dimensionArc's
|
|
353
358
|
for prohibitingArcElt in modelDocument.xmlRootElement.iterdescendants(tag="{http://www.xbrl.org/2003/linkbase}definitionArc"):
|
|
@@ -10,7 +10,7 @@ from lxml.etree import XML, XMLSyntaxError
|
|
|
10
10
|
|
|
11
11
|
from arelle.ModelObject import ModelObject
|
|
12
12
|
from arelle.ModelXbrl import ModelXbrl
|
|
13
|
-
from arelle.UrlUtil import
|
|
13
|
+
from arelle.UrlUtil import isExternalUrl
|
|
14
14
|
from arelle.ValidateFilingText import validateGraphicHeaderType
|
|
15
15
|
from arelle.typing import TypeGetText
|
|
16
16
|
from ..Const import supportedImgTypes
|
|
@@ -89,7 +89,7 @@ def checkSVGContent(
|
|
|
89
89
|
modelXbrl.error(f"{guidance}.executableCodePresent",
|
|
90
90
|
_("Inline XBRL images MUST NOT contain executable code: %(element)s"),
|
|
91
91
|
modelObject=imgElt, element=eltTag)
|
|
92
|
-
elif
|
|
92
|
+
elif isExternalUrl(href):
|
|
93
93
|
modelXbrl.error(f"{guidance}.referencesPointingOutsideOfTheReportingPackagePresent",
|
|
94
94
|
_("Inline XBRL instance document [image] MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
95
95
|
modelObject=imgElt, element=eltTag)
|
|
@@ -27,7 +27,7 @@ from arelle.PythonUtil import isLegacyAbs, strTruncate
|
|
|
27
27
|
from arelle.utils.Contexts import partitionModelXbrlContexts
|
|
28
28
|
from arelle.utils.Units import partitionModelXbrlUnits
|
|
29
29
|
from arelle.utils.validate.DetectScriptsInXhtml import containsScriptMarkers
|
|
30
|
-
from arelle.UrlUtil import decodeBase64DataImage, isHttpUrl,
|
|
30
|
+
from arelle.UrlUtil import decodeBase64DataImage, isHttpUrl, isExternalUrl
|
|
31
31
|
from arelle.ValidateFilingText import parseImageDataURL
|
|
32
32
|
from arelle.ValidateUtr import ValidateUtr
|
|
33
33
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
@@ -307,7 +307,7 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
307
307
|
modelObject=elt, element=eltTag)
|
|
308
308
|
elif eltTag == "img":
|
|
309
309
|
src = elt.get("src","").strip()
|
|
310
|
-
if
|
|
310
|
+
if isExternalUrl(src):
|
|
311
311
|
modelXbrl.error("ESEF.4.1.6.xHTMLDocumentContainsExternalReferences" if val.unconsolidated
|
|
312
312
|
else "ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
313
313
|
_("Inline XBRL instance documents MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
@@ -365,7 +365,7 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
365
365
|
# or to other sections of the annual financial report.'''
|
|
366
366
|
#elif eltTag == "a":
|
|
367
367
|
# href = elt.get("href","").strip()
|
|
368
|
-
# if
|
|
368
|
+
# if isExternalUrl(href):
|
|
369
369
|
# modelXbrl.error("ESEF.4.1.6.xHTMLDocumentContainsExternalReferences" if val.unconsolidated
|
|
370
370
|
# else "ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
371
371
|
# _("Inline XBRL instance documents MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
@@ -386,6 +386,11 @@ def checkFilingDTS(val: ValidateXbrl, modelDocument: ModelDocument, esefNotesCon
|
|
|
386
386
|
val.modelXbrl.error("ESEF.3.1.1.linkbasesNotSeparateFiles",
|
|
387
387
|
_("Each linkbase type MUST be provided in a separate linkbase file, found: %(linkbasesFound)s."),
|
|
388
388
|
modelObject=modelDocument.xmlRootElement, linkbasesFound=", ".join(sorted(linkbasesFound)))
|
|
389
|
+
# As per ESEF conformance test case TC2_invalid, also output an extensionTaxonomyWrongFilesStructure error
|
|
390
|
+
val.modelXbrl.error("ESEF.3.1.1.extensionTaxonomyWrongFilesStructure",
|
|
391
|
+
_("Each linkbase type MUST be provided in a separate linkbase file, please check file %(documentName)s."),
|
|
392
|
+
modelObject=modelDocument.xmlRootElement,
|
|
393
|
+
documentName=modelDocument.basename)
|
|
389
394
|
|
|
390
395
|
# check for any prohibiting dimensionArc's
|
|
391
396
|
for prohibitingArcElt in modelDocument.xmlRootElement.iterdescendants(tag="{http://www.xbrl.org/2003/linkbase}definitionArc"):
|
|
@@ -33,7 +33,7 @@ from arelle.PythonUtil import strTruncate
|
|
|
33
33
|
from arelle.utils.Contexts import partitionModelXbrlContexts
|
|
34
34
|
from arelle.utils.Units import partitionModelXbrlUnits
|
|
35
35
|
from arelle.utils.validate.DetectScriptsInXhtml import containsScriptMarkers
|
|
36
|
-
from arelle.UrlUtil import isHttpUrl
|
|
36
|
+
from arelle.UrlUtil import isHttpUrl, isExternalUrl
|
|
37
37
|
from arelle.ValidateUtr import ValidateUtr
|
|
38
38
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
39
39
|
from arelle.ValidateXbrlCalcs import inferredDecimals, rangeValue
|
|
@@ -355,6 +355,27 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
355
355
|
modelXbrl.error(f"{contentOtherThanXHTMLGuidance}.executableCodePresent",
|
|
356
356
|
_("Inline XBRL documents MUST NOT contain executable code: %(element)s"),
|
|
357
357
|
modelObject=elt, element=eltTag)
|
|
358
|
+
externalReferenceFound = False
|
|
359
|
+
if eltTag == "object":
|
|
360
|
+
# Check if the attribute 'archive' contains an external reference!
|
|
361
|
+
archiveAttr = elt.get("archive", "").strip()
|
|
362
|
+
for possibleURI in archiveAttr.split(" "):
|
|
363
|
+
if isExternalUrl(possibleURI.strip()):
|
|
364
|
+
externalReferenceFound = True
|
|
365
|
+
break
|
|
366
|
+
elif eltTag == "script":
|
|
367
|
+
# Check if the attribute 'src' contains an external reference!
|
|
368
|
+
srcAttr = elt.get("src", "").strip()
|
|
369
|
+
if isExternalUrl(srcAttr):
|
|
370
|
+
externalReferenceFound = True
|
|
371
|
+
if externalReferenceFound:
|
|
372
|
+
modelXbrl.error(
|
|
373
|
+
"ESEF.4.1.6.xHTMLDocumentContainsExternalReferences" if val.unconsolidated
|
|
374
|
+
else "ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
375
|
+
_("Inline XBRL instance documents MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
376
|
+
modelObject=elt, element=eltTag,
|
|
377
|
+
messageCodes=("ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
378
|
+
"ESEF.4.1.6.xHTMLDocumentContainsExternalReferences"))
|
|
358
379
|
elif eltTag == "a" and "mailto" in elt.get("href", ""):
|
|
359
380
|
modelXbrl.warning(f"{contentOtherThanXHTMLGuidance}.executableCodePresent.mailto",
|
|
360
381
|
_("Inline XBRL documents SHOULD NOT contain any 'mailto' URI: %(element)s"),
|
|
@@ -371,7 +392,7 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
371
392
|
# or to other sections of the annual financial report.'''
|
|
372
393
|
#elif eltTag == "a":
|
|
373
394
|
# href = elt.get("href","").strip()
|
|
374
|
-
# if
|
|
395
|
+
# if isExternalUrl(href):
|
|
375
396
|
# modelXbrl.error("ESEF.4.1.6.xHTMLDocumentContainsExternalReferences" if val.unconsolidated
|
|
376
397
|
# else "ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
377
398
|
# _("Inline XBRL instance documents MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
@@ -92,7 +92,11 @@
|
|
|
92
92
|
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_cor.xsd",
|
|
93
93
|
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_cor.xsd",
|
|
94
94
|
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
95
|
-
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd"
|
|
95
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
96
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
97
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
98
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
99
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd"
|
|
96
100
|
],
|
|
97
101
|
"effectiveTaxonomyURLs": [
|
|
98
102
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
@@ -108,7 +112,13 @@
|
|
|
108
112
|
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
109
113
|
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
110
114
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
111
|
-
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd"
|
|
115
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
116
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
117
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
118
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
119
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
120
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
121
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd"
|
|
112
122
|
],
|
|
113
123
|
"effectiveTaxonomyURLs": [
|
|
114
124
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
@@ -124,7 +134,13 @@
|
|
|
124
134
|
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
125
135
|
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
126
136
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
127
|
-
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd"
|
|
137
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
138
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
139
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
140
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
141
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
142
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
143
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd"
|
|
128
144
|
],
|
|
129
145
|
"effectiveTaxonomyURLs": [
|
|
130
146
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
@@ -142,7 +158,15 @@
|
|
|
142
158
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
143
159
|
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
144
160
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
145
|
-
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd"
|
|
161
|
+
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
162
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
163
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
164
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
165
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
166
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
167
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
168
|
+
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_all.xsd",
|
|
169
|
+
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_all.xsd"
|
|
146
170
|
],
|
|
147
171
|
"effectiveTaxonomyURLs": [
|
|
148
172
|
"http://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd",
|
|
@@ -17,7 +17,7 @@ from arelle import ModelDocument
|
|
|
17
17
|
from arelle.ModelObjectFactory import parser
|
|
18
18
|
from arelle.ModelXbrl import ModelXbrl
|
|
19
19
|
from arelle.typing import TypeGetText
|
|
20
|
-
from arelle.UrlUtil import decodeBase64DataImage,
|
|
20
|
+
from arelle.UrlUtil import decodeBase64DataImage, isExternalUrl
|
|
21
21
|
from arelle.utils.validate.Validation import Validation
|
|
22
22
|
from arelle.ValidateFilingText import parseImageDataURL, validateGraphicHeaderType
|
|
23
23
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
@@ -105,7 +105,7 @@ def validateImage(
|
|
|
105
105
|
if minExternalRessourceSize != -1:
|
|
106
106
|
# transform kb to b
|
|
107
107
|
minExternalRessourceSize = minExternalRessourceSize * 1024
|
|
108
|
-
if
|
|
108
|
+
if isExternalUrl(image):
|
|
109
109
|
yield Validation.error(("ESEF.4.1.6.xHTMLDocumentContainsExternalReferences" if not params.consolidated
|
|
110
110
|
else "ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
111
111
|
"NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences"),
|
|
@@ -277,7 +277,7 @@ def checkSVGContentElt(
|
|
|
277
277
|
yield Validation.error((f"{guidance}.executableCodePresent", "NL.NL-KVK.3.5.1.1.executableCodePresent"),
|
|
278
278
|
_("Inline XBRL images MUST NOT contain executable code: %(element)s"),
|
|
279
279
|
modelObject=imgElts, element=eltTag)
|
|
280
|
-
elif
|
|
280
|
+
elif isExternalUrl(href):
|
|
281
281
|
yield Validation.error((f"{guidance}.referencesPointingOutsideOfTheReportingPackagePresent", "NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences"),
|
|
282
282
|
_("Inline XBRL instance document [image] MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
283
283
|
modelObject=imgElts, element=eltTag)
|
|
@@ -66,10 +66,10 @@ arelle/TkTableWrapper.py,sha256=Bdm-WmLdwIiudqfaVGZElip_92eeSKQdd7hCjlILm1A,3361
|
|
|
66
66
|
arelle/UITkTable.py,sha256=N83cXi5c0lLZLsDbwSKcPrlYoUoGsNavGN5YRx6d9XY,39810
|
|
67
67
|
arelle/UiUtil.py,sha256=3G0xPclZI8xW_XQDbiFrmylB7Nd5muqi5n2x2oMkMZU,34218
|
|
68
68
|
arelle/Updater.py,sha256=IZ8cq44Rq88WbQcB1VOpMA6bxdfZxfYQ8rgu9Ehpbes,7448
|
|
69
|
-
arelle/UrlUtil.py,sha256=
|
|
69
|
+
arelle/UrlUtil.py,sha256=EmjVfZ6-Ax5cvjVsbdYMb3VHzISVecGDE2gLRHzHmfQ,32489
|
|
70
70
|
arelle/Validate.py,sha256=cX1OA3JPiwmjNmxfecZc24GBW1qXdjcEEynJ9F1K7Zg,58764
|
|
71
71
|
arelle/ValidateDuplicateFacts.py,sha256=LEIbdEvm_fD4Nr5PMpVSy05e7FuyTw-VJMTVSSNX7Ac,21819
|
|
72
|
-
arelle/ValidateFilingText.py,sha256=
|
|
72
|
+
arelle/ValidateFilingText.py,sha256=ppPC8Uje1cxaVXQnRSpgNtLO2BlHWM9316IxPj7bfpA,54024
|
|
73
73
|
arelle/ValidateInfoset.py,sha256=Rz_XBi5Ha43KpxXYhjLolURcWVx5qmqyjLxw48Yt9Dg,20396
|
|
74
74
|
arelle/ValidateUtr.py,sha256=oxOPrOa1XEzBay4miXvx6eRLTnVFYUIJC9ueWUk4EkI,13633
|
|
75
75
|
arelle/ValidateVersReport.py,sha256=RMe7GlcyZV0HoVFHL0qOGrKm4et-6yPq5dmikkhnvoU,43196
|
|
@@ -125,7 +125,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
125
125
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
126
126
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
127
127
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
-
arelle/_version.py,sha256=
|
|
128
|
+
arelle/_version.py,sha256=ZuR2k0xha7THQ2bqrzNVBj__6Yw-TJ7U8vP_KjsG1Z4,708
|
|
129
129
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
130
130
|
arelle/api/Session.py,sha256=a71ML4FOkWxeqxQBRu6WUqkUoI4C5R6znzAQcbGR5jg,7902
|
|
131
131
|
arelle/config/creationSoftwareNames.json,sha256=5MK7XUjfDJ9OpRCCHXeOErJ1SlTBZji4WEcEOdOacx0,3128
|
|
@@ -304,7 +304,7 @@ arelle/plugin/validate/DBA/PluginValidationDataExtension.py,sha256=y9W5S5QeuBoDk
|
|
|
304
304
|
arelle/plugin/validate/DBA/ValidationPluginExtension.py,sha256=UygF7oELnPJcP6Ta0ncy3dy5fnJq-Mz6N2-gEaVhigo,48690
|
|
305
305
|
arelle/plugin/validate/DBA/__init__.py,sha256=KhmlUkqgsRtEXpu5DZBXFzv43nUTvi-0sdDNRfw5Up4,1564
|
|
306
306
|
arelle/plugin/validate/DBA/resources/config.xml,sha256=KHfo7SrjzmjHbfwIJBmESvOOjdIv4Av26BCcZxfn3Pg,875
|
|
307
|
-
arelle/plugin/validate/DBA/rules/__init__.py,sha256=
|
|
307
|
+
arelle/plugin/validate/DBA/rules/__init__.py,sha256=FdmlqdX7RE5nnN19PU23zLKzDibEm24UU2xurlfFmrw,10404
|
|
308
308
|
arelle/plugin/validate/DBA/rules/fr.py,sha256=IAegA_Fc-Zkjj8qlzFuo_52gNVHW-lAddBFCQw8W8P4,71318
|
|
309
309
|
arelle/plugin/validate/DBA/rules/tc.py,sha256=CXPOGHpab9Y-iV84wDXrsE-rPe_d6Uhw4HjEyTBEzq4,1572
|
|
310
310
|
arelle/plugin/validate/DBA/rules/th.py,sha256=mDrjescz6106jBGjdH6bipqx48BnxcjHSkNL1qQf0QE,6227
|
|
@@ -336,21 +336,21 @@ arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
|
|
|
336
336
|
arelle/plugin/validate/EDINET/rules/contexts.py,sha256=fSYIZOWg3Q3cDos17hNAvw1HUVdcZx7IlUFfBJnwjHo,19604
|
|
337
337
|
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=UhvTPfHxDuUitIAPY_4fgirAsjJG5Xfd-gH_4pMd3qI,25449
|
|
338
338
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=wpX5zK0IfVVYZR9ELy2g_Z_F1Jzhwd9gh_KZC5ALkLg,12756
|
|
339
|
-
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=
|
|
339
|
+
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=l5XHOBqyorub0LaQ7lA6oISy4oSynNFz4ilW9-Br89A,92060
|
|
340
340
|
arelle/plugin/validate/EDINET/rules/manifests.py,sha256=MoT9R_a4BzuYdQVbF7RC5wz134Ve68svSdJ3NlpO_AU,4026
|
|
341
|
-
arelle/plugin/validate/EDINET/rules/upload.py,sha256=
|
|
341
|
+
arelle/plugin/validate/EDINET/rules/upload.py,sha256=_MskyvWNvVYia_-KJMZQn-PPI9yN8IMhqpRzqiyzlt4,52887
|
|
342
342
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
343
343
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
344
344
|
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
345
345
|
arelle/plugin/validate/ESEF/__init__.py,sha256=LL7uYOcGPHgjwTlcfW2oWMqWiqrZ5yABzcKkJZFrZis,20391
|
|
346
|
-
arelle/plugin/validate/ESEF/ESEF_2021/DTS.py,sha256=
|
|
347
|
-
arelle/plugin/validate/ESEF/ESEF_2021/Image.py,sha256=
|
|
348
|
-
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=
|
|
346
|
+
arelle/plugin/validate/ESEF/ESEF_2021/DTS.py,sha256=0uVPVysjgJK4yplRUvHO2kZ6M7FC-egIjImN3791koY,26761
|
|
347
|
+
arelle/plugin/validate/ESEF/ESEF_2021/Image.py,sha256=UDGpb2qFjt6J8MTeevlbDQX8D79Hzv3cZoxvkmDtEvE,4857
|
|
348
|
+
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=KCqJnjTUEe3FFiztQ-PDTJoYNJQ4QFZ3tKj_na0spjg,63680
|
|
349
349
|
arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
350
|
-
arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=
|
|
351
|
-
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=
|
|
350
|
+
arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=t8eadnO1paPzHcCaEEs67hg17dSPDlGlDbVpHwJF6UA,29818
|
|
351
|
+
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=BCruY89slaiDuZIIVriAD1DPGIrIFNUQqMVBifEWY7Q,76680
|
|
352
352
|
arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
353
|
-
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=
|
|
353
|
+
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=69o1ubI1-fNcaF7uOp1HTBcyVL_kCquAG3f3H6V9Ghk,17275
|
|
354
354
|
arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
|
|
355
355
|
arelle/plugin/validate/FERC/__init__.py,sha256=rC1OYNBWnoXowEohiR9yagHtAi_NPAlmaahRSQhSdS4,11325
|
|
356
356
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
@@ -681,16 +681,16 @@ arelle/utils/Units.py,sha256=c9bwnu9Xnm00gC9Q6qQ1ogsEeTEXGRH7rahlEbrEWnQ,1201
|
|
|
681
681
|
arelle/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
682
682
|
arelle/utils/validate/Decorator.py,sha256=8LGmA171HZgKrALtsMKyHqMNM-XCdwJOv6KpZz4pC2c,3161
|
|
683
683
|
arelle/utils/validate/DetectScriptsInXhtml.py,sha256=RFBh_Z24OjR69s71qQzSzbxdU-WCTWuvYlONN-BgpZ0,2098
|
|
684
|
-
arelle/utils/validate/ESEFImage.py,sha256=
|
|
684
|
+
arelle/utils/validate/ESEFImage.py,sha256=R3_iWmLYBbIAnPuNpuRi8bqa3MAPXc8MDumfizkAz_8,15485
|
|
685
685
|
arelle/utils/validate/Validation.py,sha256=n6Ag7VeCj_VO5nqzw_P53hOfXXeT2APK0Enb3UQqBns,832
|
|
686
686
|
arelle/utils/validate/ValidationPlugin.py,sha256=mArkGwSUQxMnLrQT_oprDjeJaN9dD0A0LWvpHCSmFz8,14712
|
|
687
687
|
arelle/utils/validate/ValidationUtil.py,sha256=hghMQoNuC3ocs6kkNtIQPhh8QwzubwHGtGn6g-Yx4ME,525
|
|
688
688
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
689
689
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
690
690
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
691
|
-
arelle_release-2.37.
|
|
692
|
-
arelle_release-2.37.
|
|
693
|
-
arelle_release-2.37.
|
|
694
|
-
arelle_release-2.37.
|
|
695
|
-
arelle_release-2.37.
|
|
696
|
-
arelle_release-2.37.
|
|
691
|
+
arelle_release-2.37.65.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
692
|
+
arelle_release-2.37.65.dist-info/METADATA,sha256=mzOF2EBs8Qc8HWaljQqI650UvHDftMw3JUL83k7QwCs,9355
|
|
693
|
+
arelle_release-2.37.65.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
694
|
+
arelle_release-2.37.65.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
695
|
+
arelle_release-2.37.65.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
696
|
+
arelle_release-2.37.65.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|