arelle-release 2.37.34__py3-none-any.whl → 2.37.35__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/ModelValue.py +4 -3
- arelle/_version.py +2 -2
- arelle/plugin/validate/EDINET/Constants.py +12 -0
- arelle/plugin/validate/EDINET/Manifest.py +124 -0
- arelle/plugin/validate/EDINET/__init__.py +10 -47
- arelle/plugin/validate/EDINET/rules/upload.py +72 -2
- {arelle_release-2.37.34.dist-info → arelle_release-2.37.35.dist-info}/METADATA +1 -1
- {arelle_release-2.37.34.dist-info → arelle_release-2.37.35.dist-info}/RECORD +12 -10
- {arelle_release-2.37.34.dist-info → arelle_release-2.37.35.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.34.dist-info → arelle_release-2.37.35.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.34.dist-info → arelle_release-2.37.35.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.34.dist-info → arelle_release-2.37.35.dist-info}/top_level.txt +0 -0
arelle/ModelValue.py
CHANGED
|
@@ -35,11 +35,11 @@ def qname(value: ModelObject | str | QName, name: str | ModelObject | None = Non
|
|
|
35
35
|
def qname(value: ModelObject, name: QName, noPrefixIsNoNamespace: bool) -> QName: ...
|
|
36
36
|
|
|
37
37
|
@overload
|
|
38
|
-
def qname(value: ModelObject | str | QName | Any | None, name: str | ModelObject | dict[str, str] | None) -> QName | None : ...
|
|
38
|
+
def qname(value: ModelObject | str | QName | Any | None, name: str | ModelObject | dict[str, str] | dict[str | None, str] | None) -> QName | None : ...
|
|
39
39
|
|
|
40
40
|
def qname(
|
|
41
41
|
value: ModelObject | str | QName | Any | None,
|
|
42
|
-
name: str | QName | ModelObject | dict[str, str] | None = None,
|
|
42
|
+
name: str | QName | ModelObject | dict[str, str] | dict[str | None, str] | None = None,
|
|
43
43
|
noPrefixIsNoNamespace: bool = False,
|
|
44
44
|
castException: Exception | None = None,
|
|
45
45
|
prefixException: Exception | None = None,
|
|
@@ -66,6 +66,7 @@ def qname(
|
|
|
66
66
|
elif not isinstance(value, str):
|
|
67
67
|
if castException: raise castException
|
|
68
68
|
return None
|
|
69
|
+
namespaceDict: dict[str | None, str] | None
|
|
69
70
|
if value and value[0] == '{': # clark notation (with optional prefix)
|
|
70
71
|
namespaceURI,sep,prefixedLocalName = value[1:].rpartition('}')
|
|
71
72
|
prefix: str | None
|
|
@@ -85,7 +86,7 @@ def qname(
|
|
|
85
86
|
else:
|
|
86
87
|
if isinstance(name, dict):
|
|
87
88
|
namespaceURI = None
|
|
88
|
-
namespaceDict = name
|
|
89
|
+
namespaceDict = cast(dict[str | None, str], name) # note that default prefix must be None, not '', in dict
|
|
89
90
|
elif name is not None:
|
|
90
91
|
if name: # len > 0
|
|
91
92
|
namespaceURI = value
|
arelle/_version.py
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from arelle.ModelValue import qname
|
|
5
|
+
|
|
6
|
+
qnEdinetManifestInsert = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}insert")
|
|
7
|
+
qnEdinetManifestInstance = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}instance")
|
|
8
|
+
qnEdinetManifestItem = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}item")
|
|
9
|
+
qnEdinetManifestIxbrl = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}ixbrl")
|
|
10
|
+
qnEdinetManifestList = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}list")
|
|
11
|
+
qnEdinetManifestTitle = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}title")
|
|
12
|
+
qnEdinetManifestTocComposition = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}tocComposition")
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import zipfile
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from functools import lru_cache
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from lxml import etree
|
|
12
|
+
from lxml.etree import _Element
|
|
13
|
+
|
|
14
|
+
from arelle import XbrlConst
|
|
15
|
+
from arelle.FileSource import FileSource
|
|
16
|
+
from arelle.ModelValue import QName, qname
|
|
17
|
+
from . import Constants
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass(frozen=True)
|
|
21
|
+
class Manifest:
|
|
22
|
+
instances: list[ManifestInstance]
|
|
23
|
+
path: Path
|
|
24
|
+
titlesByLang: dict[str, str]
|
|
25
|
+
tocItems: list[ManifestTocItem]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class ManifestTocItem:
|
|
30
|
+
extrole: str
|
|
31
|
+
childItems: list[ManifestTocItem]
|
|
32
|
+
itemIn: str
|
|
33
|
+
parent: QName | None
|
|
34
|
+
ref: str
|
|
35
|
+
start: QName | None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclass(frozen=True)
|
|
39
|
+
class ManifestInstance:
|
|
40
|
+
id: str
|
|
41
|
+
ixbrlFiles: list[Path]
|
|
42
|
+
preferredFilename: str
|
|
43
|
+
type: str
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _parseManifestTocItems(parentElt: _Element, parentQName: QName | None) -> list[ManifestTocItem]:
|
|
47
|
+
tocItems = []
|
|
48
|
+
for itemElt in parentElt.iterchildren(tag=Constants.qnEdinetManifestItem.clarkNotation):
|
|
49
|
+
childTocItems = []
|
|
50
|
+
for insertElt in itemElt.iterchildren(tag=Constants.qnEdinetManifestInsert.clarkNotation):
|
|
51
|
+
childParentQName = qname(insertElt.attrib.get("parent"), insertElt.nsmap) if insertElt.attrib.get("parent") else None
|
|
52
|
+
childTocItems.extend(_parseManifestTocItems(insertElt, childParentQName))
|
|
53
|
+
tocItems.append(ManifestTocItem(
|
|
54
|
+
extrole=itemElt.attrib.get("extrole", ""),
|
|
55
|
+
childItems=childTocItems,
|
|
56
|
+
parent=parentQName,
|
|
57
|
+
itemIn=itemElt.attrib.get("in", ""),
|
|
58
|
+
ref=itemElt.attrib.get("ref", ""),
|
|
59
|
+
start=qname(itemElt.attrib.get("start"), itemElt.nsmap) if itemElt.attrib.get("start") else None,
|
|
60
|
+
))
|
|
61
|
+
return tocItems
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _parseManifestDoc(xmlRootElement: _Element, path: Path) -> Manifest:
|
|
65
|
+
instances = []
|
|
66
|
+
titlesByLang = {}
|
|
67
|
+
base = path.parent
|
|
68
|
+
tocElts = list(xmlRootElement.iterchildren(tag=Constants.qnEdinetManifestTocComposition.clarkNotation))
|
|
69
|
+
assert len(tocElts) == 1, 'There should be exactly one tocComposition element in the manifest.'
|
|
70
|
+
for titleElt in tocElts[0].iterchildren(tag=Constants.qnEdinetManifestTitle.clarkNotation):
|
|
71
|
+
lang = titleElt.attrib.get(XbrlConst.qnXmlLang.clarkNotation, "")
|
|
72
|
+
titlesByLang[lang] = titleElt.text.strip() if titleElt.text else ""
|
|
73
|
+
tocItems = _parseManifestTocItems(tocElts[0], None)
|
|
74
|
+
listElts = list(xmlRootElement.iterchildren(tag=Constants.qnEdinetManifestList.clarkNotation))
|
|
75
|
+
assert len(listElts) == 1, 'There should be exactly one list element in the manifest.'
|
|
76
|
+
for instanceElt in listElts[0].iterchildren(tag=Constants.qnEdinetManifestInstance.clarkNotation):
|
|
77
|
+
instanceId = str(instanceElt.attrib.get("id", ""))
|
|
78
|
+
instanceType = str(instanceElt.attrib.get("type", ""))
|
|
79
|
+
preferredFilename = str(instanceElt.attrib.get("preferredFilename", ""))
|
|
80
|
+
ixbrlFiles = []
|
|
81
|
+
for ixbrlElt in instanceElt.iterchildren(tag=Constants.qnEdinetManifestIxbrl.clarkNotation):
|
|
82
|
+
uri = ixbrlElt.text.strip() if ixbrlElt.text is not None else None
|
|
83
|
+
if uri is not None and len(uri) > 0:
|
|
84
|
+
ixbrlFiles.append(base / uri)
|
|
85
|
+
instances.append(ManifestInstance(
|
|
86
|
+
id=instanceId,
|
|
87
|
+
ixbrlFiles=ixbrlFiles,
|
|
88
|
+
preferredFilename=preferredFilename,
|
|
89
|
+
type=instanceType,
|
|
90
|
+
))
|
|
91
|
+
return Manifest(
|
|
92
|
+
instances=instances,
|
|
93
|
+
path=path,
|
|
94
|
+
titlesByLang=titlesByLang,
|
|
95
|
+
tocItems=tocItems,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@lru_cache(1)
|
|
100
|
+
def parseManifests(filesource: FileSource) -> list[Manifest]:
|
|
101
|
+
manifests: list[Manifest] = []
|
|
102
|
+
if filesource.isArchive:
|
|
103
|
+
if filesource.isTaxonomyPackage:
|
|
104
|
+
return manifests
|
|
105
|
+
if filesource.reportPackage is not None:
|
|
106
|
+
return manifests
|
|
107
|
+
for _archiveFile in (filesource.dir or ()):
|
|
108
|
+
if not Path(_archiveFile).stem.startswith('manifest'):
|
|
109
|
+
continue
|
|
110
|
+
assert isinstance(filesource.fs, zipfile.ZipFile), \
|
|
111
|
+
"The EDINET plugin only supports archives in .zip format."
|
|
112
|
+
with filesource.fs.open(_archiveFile) as manifestDoc:
|
|
113
|
+
xmlRootElement = etree.fromstring(manifestDoc.read())
|
|
114
|
+
manifests.append(_parseManifestDoc(xmlRootElement, Path(_archiveFile)))
|
|
115
|
+
elif (dirpath := Path(str(filesource.url))).is_dir():
|
|
116
|
+
for file in dirpath.rglob("*"):
|
|
117
|
+
if not file.is_file():
|
|
118
|
+
continue
|
|
119
|
+
if not file.stem.startswith('manifest'):
|
|
120
|
+
continue
|
|
121
|
+
with open(file, 'rb') as manifestDoc:
|
|
122
|
+
xmlRootElement = etree.fromstring(manifestDoc.read())
|
|
123
|
+
manifests.append(_parseManifestDoc(xmlRootElement, file))
|
|
124
|
+
return manifests
|
|
@@ -5,17 +5,15 @@ See COPYRIGHT.md for copyright information.
|
|
|
5
5
|
"""
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
-
import zipfile
|
|
9
8
|
from collections import defaultdict
|
|
10
9
|
from pathlib import Path
|
|
11
10
|
from typing import Any
|
|
12
11
|
|
|
13
|
-
from lxml import etree
|
|
14
|
-
from lxml.etree import _Element
|
|
15
|
-
|
|
16
12
|
from arelle.FileSource import FileSource
|
|
17
13
|
from arelle.ModelXbrl import ModelXbrl
|
|
18
14
|
from arelle.Version import authorLabel, copyrightLabel
|
|
15
|
+
from . import Constants
|
|
16
|
+
from .Manifest import Manifest, ManifestInstance, parseManifests
|
|
19
17
|
from .ValidationPluginExtension import ValidationPluginExtension
|
|
20
18
|
from .rules import edinet, frta, gfm, upload
|
|
21
19
|
|
|
@@ -52,53 +50,18 @@ def disclosureSystemConfigURL(*args: Any, **kwargs: Any) -> str:
|
|
|
52
50
|
return validationPlugin.disclosureSystemConfigURL
|
|
53
51
|
|
|
54
52
|
|
|
55
|
-
def _parseManifestDoc(xmlRootElement: _Element, base: Path) -> dict[str, list[Path]]:
|
|
56
|
-
sets = defaultdict(list)
|
|
57
|
-
for instanceElt in xmlRootElement.iter(tag="{http://disclosure.edinet-fsa.go.jp/2013/manifest}instance"):
|
|
58
|
-
instanceId = str(instanceElt.attrib["id"])
|
|
59
|
-
for ixbrlElt in instanceElt.iter(tag="{http://disclosure.edinet-fsa.go.jp/2013/manifest}ixbrl"):
|
|
60
|
-
uri = ixbrlElt.text.strip() if ixbrlElt.text is not None else None
|
|
61
|
-
if uri:
|
|
62
|
-
sets[instanceId].append(base / uri)
|
|
63
|
-
return sets
|
|
64
|
-
|
|
65
|
-
|
|
66
53
|
def fileSourceEntrypointFiles(filesource: FileSource, inlineOnly: bool, *args: Any, **kwargs: Any) -> list[dict[str, Any]] | None:
|
|
67
|
-
manifests =
|
|
68
|
-
if filesource.isArchive:
|
|
69
|
-
if filesource.isTaxonomyPackage:
|
|
70
|
-
return None
|
|
71
|
-
if filesource.reportPackage is not None:
|
|
72
|
-
return None
|
|
73
|
-
for _archiveFile in (filesource.dir or ()):
|
|
74
|
-
if not Path(_archiveFile).stem.startswith('manifest'):
|
|
75
|
-
continue
|
|
76
|
-
assert isinstance(filesource.fs, zipfile.ZipFile), \
|
|
77
|
-
"The EDINET plugin only supports archives in .zip format."
|
|
78
|
-
with filesource.fs.open(_archiveFile) as manifestDoc:
|
|
79
|
-
base = Path(_archiveFile).parent
|
|
80
|
-
xmlRootElement = etree.fromstring(manifestDoc.read())
|
|
81
|
-
manifests.update(_parseManifestDoc(xmlRootElement, base))
|
|
82
|
-
elif (dirpath := Path(str(filesource.url))).is_dir():
|
|
83
|
-
for file in dirpath.rglob("*"):
|
|
84
|
-
if not file.is_file():
|
|
85
|
-
continue
|
|
86
|
-
if not file.stem.startswith('manifest'):
|
|
87
|
-
continue
|
|
88
|
-
with open(file, 'rb') as manifestDoc:
|
|
89
|
-
base = file.parent
|
|
90
|
-
xmlRootElement = etree.fromstring(manifestDoc.read())
|
|
91
|
-
manifests.update(_parseManifestDoc(xmlRootElement, base))
|
|
54
|
+
manifests = parseManifests(filesource)
|
|
92
55
|
if len(manifests) == 0:
|
|
93
56
|
return None
|
|
94
|
-
|
|
95
57
|
entrypointFiles = []
|
|
96
|
-
for
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
58
|
+
for manifest in manifests:
|
|
59
|
+
for instance in manifest.instances:
|
|
60
|
+
entrypoints = []
|
|
61
|
+
for ixbrlFile in instance.ixbrlFiles:
|
|
62
|
+
filesource.select(str(ixbrlFile))
|
|
63
|
+
entrypoints.append({"file": filesource.url})
|
|
64
|
+
entrypointFiles.append({'ixds': entrypoints})
|
|
102
65
|
return entrypointFiles
|
|
103
66
|
|
|
104
67
|
|
|
@@ -4,11 +4,10 @@ See COPYRIGHT.md for copyright information.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
import re
|
|
7
|
-
import zipfile
|
|
8
7
|
from collections import defaultdict
|
|
9
8
|
from collections.abc import Iterable
|
|
10
9
|
from pathlib import Path
|
|
11
|
-
from typing import Any
|
|
10
|
+
from typing import Any
|
|
12
11
|
|
|
13
12
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
14
13
|
from arelle.typing import TypeGetText
|
|
@@ -17,6 +16,7 @@ from arelle.utils.validate.Decorator import validation
|
|
|
17
16
|
from arelle.utils.validate.Validation import Validation
|
|
18
17
|
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
19
18
|
from ..FormType import FormType, HTML_EXTENSIONS, IMAGE_EXTENSIONS
|
|
19
|
+
from ..Manifest import parseManifests
|
|
20
20
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
21
21
|
|
|
22
22
|
_: TypeGetText
|
|
@@ -452,3 +452,73 @@ def rule_EC1020E(
|
|
|
452
452
|
path=str(path),
|
|
453
453
|
file=str(path),
|
|
454
454
|
)
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
@validation(
|
|
458
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
459
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
460
|
+
)
|
|
461
|
+
def rule_manifest_preferredFilename(
|
|
462
|
+
pluginData: PluginValidationDataExtension,
|
|
463
|
+
val: ValidateXbrl,
|
|
464
|
+
*args: Any,
|
|
465
|
+
**kwargs: Any,
|
|
466
|
+
) -> Iterable[Validation]:
|
|
467
|
+
"""
|
|
468
|
+
EDINET.EC5804E: The preferredFilename attribute must be set on the instance
|
|
469
|
+
element in the manifest file.
|
|
470
|
+
|
|
471
|
+
EDINET.EC5805E: The instance file extension is not ".xbrl". File name: xxx
|
|
472
|
+
Please change the extension of the instance name set in the preferredFilename
|
|
473
|
+
attribute value of the instance element in the manifest file to ".xbrl".
|
|
474
|
+
|
|
475
|
+
EDINET.EC5806E: The same instance file name is set multiple times. File name: xxx
|
|
476
|
+
The preferredFilename attribute value of the instance element in the manifest
|
|
477
|
+
file must be unique within the same file.
|
|
478
|
+
"""
|
|
479
|
+
if not pluginData.shouldValidateUpload(val):
|
|
480
|
+
return
|
|
481
|
+
manifests = parseManifests(val.modelXbrl.fileSource)
|
|
482
|
+
for manifest in manifests:
|
|
483
|
+
preferredFilenames = set()
|
|
484
|
+
duplicateFilenames = set()
|
|
485
|
+
for instance in manifest.instances:
|
|
486
|
+
if len(instance.preferredFilename) == 0:
|
|
487
|
+
yield Validation.error(
|
|
488
|
+
codes='EDINET.EC5804E',
|
|
489
|
+
msg=_("The instance file name is not set. "
|
|
490
|
+
"Set the instance name as the preferredFilename attribute value "
|
|
491
|
+
"of the instance element in the manifest file. (manifest: '%(manifest)s', id: %(id)s)"),
|
|
492
|
+
manifest=str(manifest.path),
|
|
493
|
+
id=instance.id,
|
|
494
|
+
)
|
|
495
|
+
continue
|
|
496
|
+
preferredFilename = Path(instance.preferredFilename)
|
|
497
|
+
if preferredFilename.suffix != '.xbrl':
|
|
498
|
+
yield Validation.error(
|
|
499
|
+
codes='EDINET.EC5805E',
|
|
500
|
+
msg=_("The instance file extension is not '.xbrl'. "
|
|
501
|
+
"File name: '%(preferredFilename)s'. "
|
|
502
|
+
"Please change the extension of the instance name set in the "
|
|
503
|
+
"preferredFilename attribute value of the instance element in "
|
|
504
|
+
"the manifest file to '.xbrl'. (manifest: '%(manifest)s', id: %(id)s)"),
|
|
505
|
+
preferredFilename=instance.preferredFilename,
|
|
506
|
+
manifest=str(manifest.path),
|
|
507
|
+
id=instance.id,
|
|
508
|
+
)
|
|
509
|
+
continue
|
|
510
|
+
if instance.preferredFilename in preferredFilenames:
|
|
511
|
+
duplicateFilenames.add(instance.preferredFilename)
|
|
512
|
+
continue
|
|
513
|
+
preferredFilenames.add(instance.preferredFilename)
|
|
514
|
+
for duplicateFilename in duplicateFilenames:
|
|
515
|
+
yield Validation.error(
|
|
516
|
+
codes='EDINET.EC5806E',
|
|
517
|
+
msg=_("The same instance file name is set multiple times. "
|
|
518
|
+
"File name: '%(preferredFilename)s'. "
|
|
519
|
+
"The preferredFilename attribute value of the instance "
|
|
520
|
+
"element in the manifest file must be unique within the "
|
|
521
|
+
"same file. (manifest: '%(manifest)s')"),
|
|
522
|
+
manifest=str(manifest.path),
|
|
523
|
+
preferredFilename=duplicateFilename,
|
|
524
|
+
)
|
|
@@ -46,7 +46,7 @@ arelle/ModelRenderingObject.py,sha256=iPhSUlSBG-FLzAfIdUW06UZDgTCaZJ4K2mxvAtSe2B
|
|
|
46
46
|
arelle/ModelRssItem.py,sha256=GzFkmluOlFsVcrxn9HAyOAcuE7rcHUOGkp4Q6F2IlT8,7713
|
|
47
47
|
arelle/ModelRssObject.py,sha256=xjuwyJ8pU5sQmNPJFQakDEEnujZg2bMCTaj3zVezHL8,992
|
|
48
48
|
arelle/ModelTestcaseObject.py,sha256=dnCxatJcFPlu5BgTuToqgrQowYNx4YtA5KrmW4vHko4,22432
|
|
49
|
-
arelle/ModelValue.py,sha256=
|
|
49
|
+
arelle/ModelValue.py,sha256=0sr7njFjGI2W3Bct2dxf2LoG_fLerHQouQtM0v0ZY2E,39573
|
|
50
50
|
arelle/ModelVersObject.py,sha256=cPD1IzhkCfuV1eMgVFWes88DH_6WkUj5kj7sgGF2M0I,26062
|
|
51
51
|
arelle/ModelVersReport.py,sha256=bXEA9K3qkH57aABn5l-m3CTY0FAcF1yX6O4fo-URjl8,73326
|
|
52
52
|
arelle/ModelXbrl.py,sha256=bj-_enkb2AV2KVCRrRf2YPGxOoO9cdqKnVqfy3bGFZk,72125
|
|
@@ -123,7 +123,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
123
123
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
124
124
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
125
125
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
arelle/_version.py,sha256=
|
|
126
|
+
arelle/_version.py,sha256=xskzS16quHADstT6foQZG7ObyYWctCHF2zPFpKL4EAM,515
|
|
127
127
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
128
128
|
arelle/api/Session.py,sha256=27HVuK3Bz1_21l4_RLn1IQg6v0MNsUEYrHajymyWwxI,7429
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -392,18 +392,20 @@ arelle/plugin/validate/DBA/rules/tm.py,sha256=ui9oKBqlAForwkQ9kk9KBiUogTJE5pv1Rb
|
|
|
392
392
|
arelle/plugin/validate/DBA/rules/tr.py,sha256=zdi3kQ82whmweVWRLbMvcNpM8sqtUliPsGfd81rgZws,14671
|
|
393
393
|
arelle/plugin/validate/EBA/__init__.py,sha256=1kW-04W32sStSAL8wvW1ZpXnjlFv6KLbfE4aifYUB2A,46000
|
|
394
394
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
395
|
+
arelle/plugin/validate/EDINET/Constants.py,sha256=QG69rWdpIrpQzZQkRcDWk2i3rlBVohr4VtSdW-IS5_w,734
|
|
395
396
|
arelle/plugin/validate/EDINET/DisclosureSystems.py,sha256=3rKG42Eg-17Xx_KXU_V5yHW6I3LTwQunvf4a44C9k_4,36
|
|
396
397
|
arelle/plugin/validate/EDINET/FormType.py,sha256=pJfKjdjqFcRLFgH6xbEixvpwatZBBHI8uI3xjjhaPI0,3175
|
|
398
|
+
arelle/plugin/validate/EDINET/Manifest.py,sha256=VWenzA1ndOp802zpTELSLREbCrzrA-nM1UCRpRf1Q3M,4849
|
|
397
399
|
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=VSSffANEC5kuvLC54pWYQ7w8fuSKo5LGdiuZ3NwWktg,5061
|
|
398
400
|
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=HIGOpBOyuVs5SEh573M3IzdouRdEuNIBkdumieZi8r0,959
|
|
399
|
-
arelle/plugin/validate/EDINET/__init__.py,sha256=
|
|
401
|
+
arelle/plugin/validate/EDINET/__init__.py,sha256=ew9Rc2qJe5d3XvOOFzhX6MfzxNUtxIYfxRGX-wkfR1c,3555
|
|
400
402
|
arelle/plugin/validate/EDINET/resources/config.xml,sha256=GmLcW7UIj5koXJkN19P6Nq5EZJcs6gKQLQ5f2V6u78w,614
|
|
401
403
|
arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=997I3RGTLg5OY3vn5hQxVFAAxOmDSOYpuyQe6VnWSY0,16285
|
|
402
404
|
arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
403
405
|
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=hm5T8PiQbOKP58BiSV9UFvKQX10uNBpxUZ06ORSU1cE,2117
|
|
404
406
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=l7BQHOenDjYrpCX6bsXyUHgyvkjbfvJWfbpBthCHmBI,1713
|
|
405
407
|
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=rj1ylvRIoauyzlEW1z1UxOkgO6fzvoMl5myRKkEZzY4,3295
|
|
406
|
-
arelle/plugin/validate/EDINET/rules/upload.py,sha256=
|
|
408
|
+
arelle/plugin/validate/EDINET/rules/upload.py,sha256=HZ-9Gk6WtIichTGcSsSGIrMXNgsgJYQYwfUKeLs1XWU,20369
|
|
407
409
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
408
410
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
409
411
|
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
@@ -754,9 +756,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
754
756
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
755
757
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
756
758
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
757
|
-
arelle_release-2.37.
|
|
758
|
-
arelle_release-2.37.
|
|
759
|
-
arelle_release-2.37.
|
|
760
|
-
arelle_release-2.37.
|
|
761
|
-
arelle_release-2.37.
|
|
762
|
-
arelle_release-2.37.
|
|
759
|
+
arelle_release-2.37.35.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
760
|
+
arelle_release-2.37.35.dist-info/METADATA,sha256=s6_Ry1tzo2Rm-L8keJcCO6y-ChrtoedS5TjekOK7-Ec,9137
|
|
761
|
+
arelle_release-2.37.35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
762
|
+
arelle_release-2.37.35.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
763
|
+
arelle_release-2.37.35.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
764
|
+
arelle_release-2.37.35.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|