arelle-release 2.36.37__py3-none-any.whl → 2.36.39__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/CntlrWebMain.py +0 -2
- arelle/PackageManager.py +1 -1
- arelle/PluginManager.py +8 -6
- arelle/WebCache.py +7 -1
- arelle/_version.py +2 -2
- arelle/api/Session.py +1 -0
- arelle/formula/XPathParser.py +1 -1
- arelle/logging/formatters/LogFormatter.py +2 -1
- arelle/plugin/formulaLoader.py +1 -1
- arelle/plugin/inlineXbrlDocumentSet.py +115 -48
- arelle/plugin/streamingExtensions.py +1 -1
- arelle/utils/PluginHooks.py +23 -0
- {arelle_release-2.36.37.dist-info → arelle_release-2.36.39.dist-info}/METADATA +1 -1
- {arelle_release-2.36.37.dist-info → arelle_release-2.36.39.dist-info}/RECORD +18 -18
- {arelle_release-2.36.37.dist-info → arelle_release-2.36.39.dist-info}/WHEEL +1 -1
- {arelle_release-2.36.37.dist-info → arelle_release-2.36.39.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.36.37.dist-info → arelle_release-2.36.39.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.36.37.dist-info → arelle_release-2.36.39.dist-info}/top_level.txt +0 -0
arelle/CntlrWebMain.py
CHANGED
|
@@ -41,7 +41,6 @@ POST = 'POST'
|
|
|
41
41
|
_CNTLR: CntlrCmdLine | None = None
|
|
42
42
|
|
|
43
43
|
def getCntlr() -> CntlrCmdLine:
|
|
44
|
-
global _CNTLR
|
|
45
44
|
if _CNTLR is None:
|
|
46
45
|
raise ValueError(_('_CNTLR accessed before it was set.'))
|
|
47
46
|
return _CNTLR
|
|
@@ -59,7 +58,6 @@ def getLogHandler() -> LogToBufferHandler:
|
|
|
59
58
|
_RUNTIME_OPTIONS: RuntimeOptions | None = None
|
|
60
59
|
|
|
61
60
|
def getRuntimeOptions() -> RuntimeOptions:
|
|
62
|
-
global _RUNTIME_OPTIONS
|
|
63
61
|
if _RUNTIME_OPTIONS is None:
|
|
64
62
|
raise ValueError(_('_RUNTIME_OPTIONS accessed before it was set.'))
|
|
65
63
|
options = deepcopy(_RUNTIME_OPTIONS)
|
arelle/PackageManager.py
CHANGED
|
@@ -342,7 +342,7 @@ packagesMappings = {}
|
|
|
342
342
|
_cntlr = None
|
|
343
343
|
|
|
344
344
|
def init(cntlr: Cntlr, loadPackagesConfig: bool = True) -> None:
|
|
345
|
-
global packagesJsonFile, packagesConfig,
|
|
345
|
+
global packagesJsonFile, packagesConfig, _cntlr
|
|
346
346
|
if loadPackagesConfig:
|
|
347
347
|
try:
|
|
348
348
|
packagesJsonFile = cntlr.userAppDir + os.sep + "taxonomyPackages.json"
|
arelle/PluginManager.py
CHANGED
|
@@ -105,10 +105,13 @@ def save(cntlr: Cntlr) -> None:
|
|
|
105
105
|
f.write(jsonStr)
|
|
106
106
|
pluginConfigChanged = False
|
|
107
107
|
|
|
108
|
-
def close(): # close all loaded methods
|
|
109
|
-
pluginConfig
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
def close() -> None: # close all loaded methods
|
|
109
|
+
if pluginConfig is not None:
|
|
110
|
+
pluginConfig.clear()
|
|
111
|
+
if modulePluginInfos is not None:
|
|
112
|
+
modulePluginInfos.clear()
|
|
113
|
+
if pluginMethodsForClasses is not None:
|
|
114
|
+
pluginMethodsForClasses.clear()
|
|
112
115
|
global webCache
|
|
113
116
|
webCache = None
|
|
114
117
|
|
|
@@ -159,7 +162,6 @@ def logPluginTrace(message: str, level: Number) -> None:
|
|
|
159
162
|
:param message: Message to be logged
|
|
160
163
|
:param level: Log level of message (e.g. logging.INFO)
|
|
161
164
|
"""
|
|
162
|
-
global pluginTraceFileLogger
|
|
163
165
|
if pluginTraceFileLogger:
|
|
164
166
|
pluginTraceFileLogger.log(level, message)
|
|
165
167
|
if level >= logging.ERROR:
|
|
@@ -486,7 +488,7 @@ def _get_name_dir_prefix(
|
|
|
486
488
|
packageImportPrefix: str
|
|
487
489
|
|
|
488
490
|
moduleFilename = controller.webCache.getfilename(
|
|
489
|
-
url=moduleURL, normalize=True, base=pluginBase
|
|
491
|
+
url=moduleURL, normalize=True, base=pluginBase, allowTransformation=False
|
|
490
492
|
)
|
|
491
493
|
|
|
492
494
|
if moduleFilename:
|
arelle/WebCache.py
CHANGED
|
@@ -455,7 +455,13 @@ class WebCache:
|
|
|
455
455
|
def getfilename(
|
|
456
456
|
self, url: str | None, base: str | None = None,
|
|
457
457
|
reload: bool = False, checkModifiedTime: bool = False,
|
|
458
|
-
normalize: bool = False, filenameOnly: bool = False
|
|
458
|
+
normalize: bool = False, filenameOnly: bool = False,
|
|
459
|
+
allowTransformation: bool = True) -> str | None:
|
|
460
|
+
if allowTransformation:
|
|
461
|
+
for pluginXbrlMethod in pluginClassMethods("WebCache.TransformURL"):
|
|
462
|
+
url, final = pluginXbrlMethod(self.cntlr, url, base)
|
|
463
|
+
if final:
|
|
464
|
+
return url
|
|
459
465
|
if url is None:
|
|
460
466
|
return url
|
|
461
467
|
if base is not None or normalize:
|
arelle/_version.py
CHANGED
arelle/api/Session.py
CHANGED
arelle/formula/XPathParser.py
CHANGED
|
@@ -898,7 +898,7 @@ isInitialized = False
|
|
|
898
898
|
|
|
899
899
|
|
|
900
900
|
def initializeParser(modelManager: ModelManager) -> bool:
|
|
901
|
-
global isInitialized
|
|
901
|
+
global isInitialized
|
|
902
902
|
if not isInitialized:
|
|
903
903
|
from arelle import FunctionIxt
|
|
904
904
|
ixtFunctionNamespaces.update(FunctionIxt.ixtNamespaceFunctions.keys())
|
|
@@ -39,7 +39,8 @@ def logRefsFileLines(refs: list[dict[str, Any]]) -> str:
|
|
|
39
39
|
for ref in refs:
|
|
40
40
|
href = ref.get("href")
|
|
41
41
|
if href:
|
|
42
|
-
|
|
42
|
+
hrefWithoutFakeIxdsPrefix = href.rpartition("_IXDS#?#")[2]
|
|
43
|
+
fileLines[hrefWithoutFakeIxdsPrefix.partition("#")[0]].add(ref.get("sourceLine") or 0)
|
|
43
44
|
return ", ".join(file + " " + ', '.join(str(line)
|
|
44
45
|
for line in sorted(lines, key=lambda l: l)
|
|
45
46
|
if line)
|
arelle/plugin/formulaLoader.py
CHANGED
|
@@ -1698,7 +1698,7 @@ def compileXfsGrammar( cntlr, debugParsing ):
|
|
|
1698
1698
|
def parse(cntlr, _logMessage, xfFiles, modelXbrl=None, debugParsing=False):
|
|
1699
1699
|
from pyparsing import ParseException, ParseSyntaxException
|
|
1700
1700
|
|
|
1701
|
-
global
|
|
1701
|
+
global logMessage
|
|
1702
1702
|
logMessage = _logMessage
|
|
1703
1703
|
|
|
1704
1704
|
xfsGrammar = compileXfsGrammar(cntlr, debugParsing)
|
|
@@ -19,91 +19,141 @@ manifest file (such as JP FSA) that identifies inline XBRL documents.
|
|
|
19
19
|
|
|
20
20
|
### Command Line Usage
|
|
21
21
|
|
|
22
|
-
- **
|
|
22
|
+
- **Load from a ZIP file**:
|
|
23
|
+
|
|
24
|
+
Simple:
|
|
25
|
+
```bash
|
|
26
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file report.zip
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Verbose:
|
|
30
|
+
```bash
|
|
31
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file": "report.zip"}]}]'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **Load from a directory**:
|
|
35
|
+
|
|
36
|
+
Simple:
|
|
23
37
|
```bash
|
|
24
|
-
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file
|
|
38
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file filing-documents-directory
|
|
25
39
|
```
|
|
26
|
-
This command loads all inline XBRL documents within a zip file as an Inline XBRL Document Set.
|
|
27
40
|
|
|
28
|
-
|
|
41
|
+
Verbose:
|
|
29
42
|
```bash
|
|
30
43
|
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file": "filing-documents-directory"}]}]'
|
|
31
44
|
```
|
|
32
|
-
This command loads all inline XBRL documents within a specified directory.
|
|
33
45
|
|
|
34
|
-
- **
|
|
46
|
+
- **Load multiple documents**:
|
|
47
|
+
|
|
48
|
+
Simple:
|
|
35
49
|
```bash
|
|
36
|
-
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '
|
|
50
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file 'document-1.html|document-2.html'
|
|
37
51
|
```
|
|
38
|
-
Load two inline XBRL documents using the default Target Document.
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
Verbose:
|
|
41
54
|
```bash
|
|
42
|
-
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file1": "document-1.html", "file2": "document-2.html"}]
|
|
55
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file1": "document-1.html", "file2": "document-2.html"}]}]'
|
|
43
56
|
```
|
|
44
|
-
Load two inline XBRL documents using the `DKGAAP` Target Document.
|
|
45
57
|
|
|
46
|
-
- **
|
|
58
|
+
- **Specify target document**:
|
|
59
|
+
|
|
60
|
+
- **Default target**:
|
|
61
|
+
|
|
62
|
+
Simple:
|
|
63
|
+
```bash
|
|
64
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file report.zip --inlineTarget "(default)"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Verbose:
|
|
68
|
+
```bash
|
|
69
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file": "report.zip"}], "ixdsTarget": "(default)"}]'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- **Named target (e.g., DKGAAP)**:
|
|
73
|
+
|
|
74
|
+
Simple:
|
|
75
|
+
```bash
|
|
76
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file report.zip --inlineTarget DKGAAP
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Verbose:
|
|
80
|
+
```bash
|
|
81
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file": "report.zip"}], "ixdsTarget": "DKGAAP"}]'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
- **Load multiple IXDS sets**:
|
|
85
|
+
|
|
47
86
|
```bash
|
|
48
|
-
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file": "
|
|
87
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file '[{"ixds": [{"file": "report-1.zip"}]}, {"ixds": [{"file": "report-2.zip"}]}]'
|
|
49
88
|
```
|
|
50
|
-
Load two separate Inline XBRL Document Sets.
|
|
51
89
|
|
|
52
|
-
- **
|
|
90
|
+
- **Extract XML instance**:
|
|
91
|
+
|
|
53
92
|
```bash
|
|
54
|
-
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file
|
|
93
|
+
python arelleCmdLine.py --plugins inlineXbrlDocumentSet --file reports/report.html --saveInstance
|
|
55
94
|
```
|
|
56
|
-
Extract and save the XML Instance of the default Target Document from an Inline XBRL Document Set.
|
|
57
95
|
|
|
58
96
|
### GUI Usage
|
|
59
97
|
|
|
60
|
-
- **
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
98
|
+
- **Load IXDS documents**:
|
|
99
|
+
|
|
100
|
+
1. Go to the File menu.
|
|
101
|
+
2. Select "Open File Inline Doc Set".
|
|
102
|
+
3. Ctrl/Cmd-click to select multiple files as an IXDS.
|
|
103
|
+
|
|
104
|
+
- **Save XML instance**:
|
|
64
105
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
3. Select `Save target document` to save the XML Instance.
|
|
106
|
+
1. Load the IXDS.
|
|
107
|
+
2. Open the Tools menu.
|
|
108
|
+
3. Select "Save target document" to export the XML instance.
|
|
69
109
|
|
|
70
110
|
## Additional Notes
|
|
71
111
|
|
|
72
|
-
- Windows
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
112
|
+
- On Windows, escape quotes and backslashes when using verbose JSON:
|
|
113
|
+
```pwsh
|
|
114
|
+
.\\arelleCmdLine.exe --plugins inlineXbrlDocumentSet --file
|
|
115
|
+
"[{""ixds"":[{""file"":""C:\\\\report.zip""}], ""ixdsTarget"":""DKGAAP""}]"
|
|
116
|
+
```
|
|
117
|
+
- If no "ixdsTarget" is specified in JSON, all targets are loaded.
|
|
118
|
+
- "(default)" matches the default IXDS target (i.e., no target defined in the instance).
|
|
119
|
+
- Use "--encodeSavedXmlChars" to apply EDGAR-style encoding to non-ASCII characters.
|
|
120
|
+
- The extracted XML instance is saved in the same directory with the suffix "_extracted.xbrl".
|
|
78
121
|
"""
|
|
79
122
|
from __future__ import annotations
|
|
80
123
|
|
|
124
|
+
import os
|
|
125
|
+
import zipfile
|
|
126
|
+
from collections import defaultdict
|
|
127
|
+
from optparse import SUPPRESS_HELP
|
|
81
128
|
from typing import BinaryIO
|
|
82
129
|
|
|
83
|
-
|
|
84
|
-
from
|
|
85
|
-
from arelle.ValidateDuplicateFacts import DeduplicationType
|
|
130
|
+
import regex as re
|
|
131
|
+
from lxml.etree import XML, XMLSyntaxError
|
|
86
132
|
|
|
87
|
-
|
|
133
|
+
from arelle import FileSource, ModelXbrl, ValidateDuplicateFacts, ValidateXbrlDimensions, XbrlConst
|
|
88
134
|
from arelle.CntlrCmdLine import filesourceEntrypointFiles
|
|
89
|
-
from arelle.PrototypeDtsObject import LocPrototype, ArcPrototype
|
|
90
135
|
from arelle.FileSource import archiveFilenameParts, archiveFilenameSuffixes
|
|
136
|
+
from arelle.ModelDocument import ModelDocument, ModelDocumentReference, Type, create, inlineIxdsDiscover, load
|
|
91
137
|
from arelle.ModelInstanceObject import ModelInlineFootnote
|
|
92
138
|
from arelle.ModelObject import ModelObject
|
|
93
|
-
from arelle.ModelDocument import ModelDocument, ModelDocumentReference, Type, load, create, inlineIxdsDiscover
|
|
94
139
|
from arelle.ModelValue import INVALIDixVALUE, qname
|
|
95
140
|
from arelle.PluginManager import pluginClassMethods
|
|
141
|
+
from arelle.PrototypeDtsObject import ArcPrototype, LocPrototype
|
|
96
142
|
from arelle.PythonUtil import attrdict
|
|
143
|
+
from arelle.RuntimeOptions import RuntimeOptions
|
|
97
144
|
from arelle.UrlUtil import isHttpUrl
|
|
145
|
+
from arelle.ValidateDuplicateFacts import DeduplicationType
|
|
98
146
|
from arelle.ValidateFilingText import CDATApattern
|
|
99
147
|
from arelle.Version import authorLabel, copyrightLabel
|
|
100
|
-
from arelle.XmlUtil import
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
148
|
+
from arelle.XmlUtil import (
|
|
149
|
+
addChild,
|
|
150
|
+
copyIxFootnoteHtml,
|
|
151
|
+
elementFragmentIdentifier,
|
|
152
|
+
setXmlns,
|
|
153
|
+
xmlnsprefix,
|
|
154
|
+
)
|
|
155
|
+
from arelle.XmlValidate import NONE, VALID
|
|
156
|
+
from arelle.XmlValidate import validate as xmlValidate
|
|
107
157
|
|
|
108
158
|
DEFAULT_TARGET = "(default)"
|
|
109
159
|
IXDS_SURROGATE = "_IXDS#?#" # surrogate (fake) file name for inline XBRL doc set (IXDS)
|
|
@@ -469,9 +519,6 @@ def discoverInlineXbrlDocumentSet(modelDocument, *args, **kwargs):
|
|
|
469
519
|
return False # not discoverable by this plug-in
|
|
470
520
|
|
|
471
521
|
def fileOpenMenuEntender(cntlr, menu, *args, **kwargs):
|
|
472
|
-
# install DialogURL for GUI menu operation of runOpenWebInlineDocumentSetMenuCommand
|
|
473
|
-
global DialogURL
|
|
474
|
-
from arelle import DialogURL
|
|
475
522
|
# Extend menu with an item for the savedts plugin
|
|
476
523
|
menu.insert_command(2, label="Open Web Inline Doc Set",
|
|
477
524
|
underline=0,
|
|
@@ -496,6 +543,7 @@ def runOpenFileInlineDocumentSetMenuCommand(cntlr, runInBackground=False, saveTa
|
|
|
496
543
|
runOpenInlineDocumentSetMenuCommand(cntlr, filenames, runInBackground, saveTargetFiling)
|
|
497
544
|
|
|
498
545
|
def runOpenWebInlineDocumentSetMenuCommand(cntlr, runInBackground=False, saveTargetFiling=False):
|
|
546
|
+
from arelle import DialogURL
|
|
499
547
|
url = DialogURL.askURL(cntlr.parent, buttonSEC=True, buttonRSS=True)
|
|
500
548
|
if url:
|
|
501
549
|
runOpenInlineDocumentSetMenuCommand(cntlr, re.split(r",\s*|\s+", url), runInBackground, saveTargetFiling)
|
|
@@ -682,10 +730,29 @@ def commandLineOptionExtender(parser, *args, **kwargs):
|
|
|
682
730
|
choices=[a.value for a in ValidateDuplicateFacts.DeduplicationType],
|
|
683
731
|
dest="deduplicateIxbrlFacts",
|
|
684
732
|
help=SUPPRESS_HELP)
|
|
733
|
+
parser.add_option("--inlineTarget",
|
|
734
|
+
action="store",
|
|
735
|
+
dest="inlineTarget",
|
|
736
|
+
help=_("Specify an inline target to load. By default, all targets are loaded. Use '{}' to select the default target.").format(DEFAULT_TARGET),
|
|
737
|
+
type="string")
|
|
685
738
|
|
|
686
739
|
def commandLineFilingStart(cntlr, options, filesource, entrypointFiles, *args, **kwargs):
|
|
687
740
|
global skipExpectedInstanceComparison
|
|
688
741
|
skipExpectedInstanceComparison = getattr(options, "skipExpectedInstanceComparison", False)
|
|
742
|
+
inlineTarget = getattr(options, "inlineTarget", None)
|
|
743
|
+
if inlineTarget:
|
|
744
|
+
if isinstance(entrypointFiles, dict):
|
|
745
|
+
entrypointFiles = [entrypointFiles]
|
|
746
|
+
if isinstance(entrypointFiles, list):
|
|
747
|
+
for i, entry in enumerate(entrypointFiles):
|
|
748
|
+
entryTarget = entry.get("ixdsTarget")
|
|
749
|
+
if entryTarget and entryTarget != inlineTarget:
|
|
750
|
+
raise RuntimeError(_("Conflicting ixds targets specified: inlineTarget '{}', ixdsTarget '{}'").format(inlineTarget, entryTarget))
|
|
751
|
+
ixds = entry.get("ixds")
|
|
752
|
+
if ixds is None:
|
|
753
|
+
entry = {"ixds": [entry]}
|
|
754
|
+
entrypointFiles[i] = entry
|
|
755
|
+
entry["ixdsTarget"] = inlineTarget
|
|
689
756
|
if isinstance(entrypointFiles, list):
|
|
690
757
|
# check for any inlineDocumentSet in list
|
|
691
758
|
for entrypointFile in entrypointFiles:
|
|
@@ -845,7 +912,7 @@ def discoverIxdsDts(modelXbrl):
|
|
|
845
912
|
|
|
846
913
|
class TargetChoiceDialog:
|
|
847
914
|
def __init__(self,parent, choices):
|
|
848
|
-
from tkinter import
|
|
915
|
+
from tkinter import Listbox, StringVar, Toplevel
|
|
849
916
|
parentGeometry = re.match(r"(\d+)x(\d+)[+]?([-]?\d+)[+]?([-]?\d+)", parent.geometry())
|
|
850
917
|
dialogX = int(parentGeometry.group(3))
|
|
851
918
|
dialogY = int(parentGeometry.group(4))
|
|
@@ -824,7 +824,7 @@ def streamingOptionsExtender(parser):
|
|
|
824
824
|
'''
|
|
825
825
|
|
|
826
826
|
def streamingExtensionsSetup(cntlr, options, *args, **kwargs):
|
|
827
|
-
global
|
|
827
|
+
global _streamingExtensionsValidate
|
|
828
828
|
# streaming only checked in CmdLine/web server mode if requested
|
|
829
829
|
# _streamingExtensionsCheck = getattr(options, 'check_streaming', False)
|
|
830
830
|
_streamingExtensionsValidate = options.validate
|
arelle/utils/PluginHooks.py
CHANGED
|
@@ -790,3 +790,26 @@ class PluginHooks(ABC):
|
|
|
790
790
|
:return: None
|
|
791
791
|
"""
|
|
792
792
|
raise NotImplementedError
|
|
793
|
+
|
|
794
|
+
@staticmethod
|
|
795
|
+
def webCacheTransformUrl(
|
|
796
|
+
cntlr: CntlrCmdLine,
|
|
797
|
+
url: str | None,
|
|
798
|
+
base: str | None,
|
|
799
|
+
*args: Any,
|
|
800
|
+
**kwargs: Any,
|
|
801
|
+
) -> tuple[str | None, bool]:
|
|
802
|
+
"""
|
|
803
|
+
Plugin hook: `WebCache.TransformURL`
|
|
804
|
+
|
|
805
|
+
This hook is triggered before the web cache maps a URL to a file path.
|
|
806
|
+
It's useful if you need to map certain URLs to a location other than the web cache.
|
|
807
|
+
|
|
808
|
+
:param cntlr: The [Cntlr](#arelle.Cntlr.Cntlr) being initialized.
|
|
809
|
+
:param url: The URL to transform.
|
|
810
|
+
:param base: The base URL.
|
|
811
|
+
:param args: Argument capture to ensure new parameters don't break plugin hook.
|
|
812
|
+
:param kwargs: Argument capture to ensure new named parameters don't break plugin hook.
|
|
813
|
+
:return: Tuple of transformed URL or filepath and a boolean indicating if the URL should be returned as the final filename.
|
|
814
|
+
"""
|
|
815
|
+
raise NotImplementedError
|
|
@@ -5,7 +5,7 @@ arelle/CntlrCmdLine.py,sha256=B4C8ZnfRH67WVkFUFy3G_bTQ_vGc-DbQK6SLc-fcSCg,94266
|
|
|
5
5
|
arelle/CntlrComServer.py,sha256=h1KPf31uMbErpxTZn_iklDqUMGFgQnjZkFkFjd8gtLQ,1888
|
|
6
6
|
arelle/CntlrProfiler.py,sha256=2VQJudiUhxryVypxjODx2ccP1-n60icTiWs5lSEokhQ,972
|
|
7
7
|
arelle/CntlrQuickBooks.py,sha256=BMqd5nkNQOZyNFPefkTeWUUDCYNS6BQavaG8k1Lepu4,31543
|
|
8
|
-
arelle/CntlrWebMain.py,sha256=
|
|
8
|
+
arelle/CntlrWebMain.py,sha256=3llPzwDhshu7tcDZhdHQVuikTC5AucnQOvBgFSGsIAg,50982
|
|
9
9
|
arelle/CntlrWinMain.py,sha256=eSdO_PQynuZcE3S7BnZyP-wnn_9oiUOMlF0Qe4Dl8x0,96812
|
|
10
10
|
arelle/CntlrWinTooltip.py,sha256=6MzoAIfkYnNu_bl_je8n0adhwmKxAIcymkg9Tij9Z4M,7951
|
|
11
11
|
arelle/DialogAbout.py,sha256=XXzMV0fO4BQ3-l1Puirzmn7EZEdmgJg7JNYdJm1FueM,1987
|
|
@@ -50,8 +50,8 @@ arelle/ModelValue.py,sha256=6Vko4aytXg2Ajv7rI6houQb-ZX39-tcjQ4N90ZxZvE8,39430
|
|
|
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=7rz4rxIGopwRDQTD12P0sdqzvPPoMhGgkg5qkMD6TDQ,72109
|
|
53
|
-
arelle/PackageManager.py,sha256=
|
|
54
|
-
arelle/PluginManager.py,sha256=
|
|
53
|
+
arelle/PackageManager.py,sha256=tw0PI9sbuy258Xv_Ldloj8mamDpc9_cBl6zhSdkiCLE,32530
|
|
54
|
+
arelle/PluginManager.py,sha256=1Lvms_m1cUI27ETpKryDV5BQrKkTL_svRnyXVtjqZ3c,42076
|
|
55
55
|
arelle/PluginUtils.py,sha256=0vFQ29wVVpU0cTY3YOBL6FhNQhhCTwShBH4qTJGLnvc,2426
|
|
56
56
|
arelle/PrototypeDtsObject.py,sha256=0lf60VcXR_isx57hBPrc7vEMkFpYkVuK4JVBSmopzkQ,7989
|
|
57
57
|
arelle/PrototypeInstanceObject.py,sha256=CXUoDllhDqpMvSQjqIYi1Ywp-J8fLhQRV9wVD2YXgVo,13204
|
|
@@ -113,7 +113,7 @@ arelle/ViewWinTupleGrid.py,sha256=Li21jmMSZP3xIkpg8eY8Sq7KTIuAgM57wHu7i7Nu3P0,89
|
|
|
113
113
|
arelle/ViewWinVersReport.py,sha256=aYfsOgynVZpMzl6f2EzQCBLzdihYGycwb5SiTghkgMQ,9344
|
|
114
114
|
arelle/ViewWinXml.py,sha256=4ZGKtjaoCwU9etKYm9ZAS7jSmUxba1rqNEdv0OIyjTY,1250
|
|
115
115
|
arelle/WatchRss.py,sha256=5Ih4igH2MM4hpOuAXy9eO0QAyZ7jZR3S5bPzo2sdFpw,14097
|
|
116
|
-
arelle/WebCache.py,sha256=
|
|
116
|
+
arelle/WebCache.py,sha256=8dTAc-A6whcNOfPCCo0e6XpVrXw1Kom9hSqGGeyaXNE,45018
|
|
117
117
|
arelle/XbrlConst.py,sha256=YDvnf0gQ3IY5v07d8wxAHTxDmvcHIpl2mSMZeTgvKmk,56695
|
|
118
118
|
arelle/XbrlUtil.py,sha256=s2Vmrh-sZI5TeuqsziKignOc3ao-uUgnCNoelP4dDj0,9212
|
|
119
119
|
arelle/XhtmlValidate.py,sha256=0gtm7N-kXK0RB5o3c1AQXjfFuRp1w2fKZZAeyruNANw,5727
|
|
@@ -123,9 +123,9 @@ 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=2p2G8T3wuZFXmndIwl4Bmvz4HUSZZ5v_vyosQFNA87A,515
|
|
127
127
|
arelle/typing.py,sha256=Ct5lrNKRow_o9CraMEXNza8nFsJ_iGIKoUeGfPs2dxI,1084
|
|
128
|
-
arelle/api/Session.py,sha256=
|
|
128
|
+
arelle/api/Session.py,sha256=O8zpg7MJys9uxwwHf8OsSlZxpPdq7A3ONyY39Q4A3Kc,6218
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
130
130
|
arelle/archive/LoadEFMvalidate.py,sha256=HR1ZJmOvWGUlWEsWd0tGCa2TTtZSNzeL6tgN1TFfrl0,986
|
|
131
131
|
arelle/archive/LoadSavePreLbCsv.py,sha256=mekr1R6OE5d3xdUCZIVfSeolyet0HO8R6wsHnW4eyaA,767
|
|
@@ -231,7 +231,7 @@ arelle/formula/FormulaConsisAsser.py,sha256=hO4GZwozM5cGl1xTU6OwoF3LlaMxAEB5Oy0r
|
|
|
231
231
|
arelle/formula/FormulaEvaluator.py,sha256=WKNyJz1Os9gsKedJXLNC9y9u11Ea4_JQ-RAI7gSFmPU,82600
|
|
232
232
|
arelle/formula/ValidateFormula.py,sha256=b_stG7h8RhaSsPt07_x-GRBHOl2uy-JNSMd6v-jkg_w,95942
|
|
233
233
|
arelle/formula/XPathContext.py,sha256=JerF1suUL9RcKRFeF6kXZXGkuw6yaMb6gijNacrqugU,49386
|
|
234
|
-
arelle/formula/XPathParser.py,sha256=
|
|
234
|
+
arelle/formula/XPathParser.py,sha256=vqG2dj0yXVPZpIBsY2rxDIAFC376GSye4CLHfjVyhyM,50321
|
|
235
235
|
arelle/formula/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
236
236
|
arelle/images/arelle-full-word.ico,sha256=jsAzyAJZTtVPafxhgFQtdWJj7r_r0YhX_iWvWnZ4QKg,2430
|
|
237
237
|
arelle/images/arelle-mac-icon-4.gif,sha256=jTXc1dBEgZuXuZVd1XOuLuXfpjNW_pusn0mPhHhkOtk,2619
|
|
@@ -284,7 +284,7 @@ arelle/locale/fr/LC_MESSAGES/arelle.mo,sha256=HsXvnKEsnhqJqH6H9SlGBy451fnQTaizbZ
|
|
|
284
284
|
arelle/locale/fr/LC_MESSAGES/fr.po,sha256=D2WHLI9NktcxgmGx91fRLNLoVjvO3Z0jjS9AJlroOCE,168077
|
|
285
285
|
arelle/locale/ru/LC_MESSAGES/arelle.mo,sha256=i004xdiJMpXus5DnSz2y708H5vPt78Pu5ApkrdC9Fqw,375378
|
|
286
286
|
arelle/locale/ru/LC_MESSAGES/ru.po,sha256=pPACN6dXlimkr2KJ5l-B0fv4PhlijWAz3fVYJ5h3SaM,449579
|
|
287
|
-
arelle/logging/formatters/LogFormatter.py,sha256=
|
|
287
|
+
arelle/logging/formatters/LogFormatter.py,sha256=emXkUWLRZ65-qu9K-BcYrT2ueR8R-YchA8bwPY3yA60,1968
|
|
288
288
|
arelle/logging/handlers/LogHandlerWithXml.py,sha256=xj-m6aNh4gksxP9AjN0xkECxVdx9m7ElCC0lXkhFcUQ,4318
|
|
289
289
|
arelle/logging/handlers/LogToBufferHandler.py,sha256=tTzHRw9tn1Osrpc5rcKxk2iTEE3uIq5wb792z5RVYAs,612
|
|
290
290
|
arelle/logging/handlers/LogToPrintHandler.py,sha256=iT5eTZx5MXJRhI-vZjlenNOSDRgiNXSQhh398Njbje0,1299
|
|
@@ -310,11 +310,11 @@ arelle/plugin/EdgarRendererAllReports.py,sha256=V3AeDj29U1XbnFGUO30kAvZtWzDH5G-t
|
|
|
310
310
|
arelle/plugin/SECCorrespondenceLoader.py,sha256=dX3k4uI5SOKR-8zpv1Xk4X34eDQMPaWFS8R2wf8WTNs,9561
|
|
311
311
|
arelle/plugin/TDnetLoader.py,sha256=iuvp5HsSbqJHoy3XBV2Zf1m2bow2ZR47obGw3QyH67Q,9208
|
|
312
312
|
arelle/plugin/UKCompaniesHouseLoader.py,sha256=XDqt5KM_uv2gZVn8d0Kw18wbzhZEkagKirnDz1fSBGg,4682
|
|
313
|
-
arelle/plugin/formulaLoader.py,sha256=
|
|
313
|
+
arelle/plugin/formulaLoader.py,sha256=_pPZQPAZeNjGj85rvH7QRl4gEjYD7Yhxl1JhuV9wOoE,101795
|
|
314
314
|
arelle/plugin/formulaSaver.py,sha256=STlKyDA-pVUxZoEW57MSu74RdpyHVTxaHvOZyOt0cyg,31385
|
|
315
315
|
arelle/plugin/formulaXPathChecker.py,sha256=sEEeLHx17XSj8eOgFdzYLBp9ZFk2UUYLOEKtaF_pq34,18795
|
|
316
316
|
arelle/plugin/functionsMath.py,sha256=Z8N7ok3w1aOusCQA9QvqYwQ8W1j80bb-_4lVclBnNQM,9037
|
|
317
|
-
arelle/plugin/inlineXbrlDocumentSet.py,sha256=
|
|
317
|
+
arelle/plugin/inlineXbrlDocumentSet.py,sha256=FGGjjt69N3Rl28ZUo35s8sCheYLrtNbcbVROeAx5_W4,55208
|
|
318
318
|
arelle/plugin/loadFromExcel.py,sha256=SebeGTf0tBKv-0fSxAYEFLlh3Olly4x-6XTeh20SymM,124402
|
|
319
319
|
arelle/plugin/loadFromOIM.py,sha256=dJHnX56bmuY40f6vRMsQ7pJmIWcB5N_3jmYWGGnZSdM,903
|
|
320
320
|
arelle/plugin/profileCmdLine.py,sha256=uLL0fGshpiwtzyLKAtW0WuXAvcRtZgxQG6swM0e4BHA,2370
|
|
@@ -326,7 +326,7 @@ arelle/plugin/saveLoadableExcel.py,sha256=ZPYB6injFabav0dRzgS7adCFzfHkwtftjl3PfB
|
|
|
326
326
|
arelle/plugin/saveLoadableOIM.py,sha256=onT61QRygFCMGS7xTZHJz9WSo1V5PyqKQRtoTBf7GDE,38180
|
|
327
327
|
arelle/plugin/saveSKOS.py,sha256=7Z1Qedf83zMo9EbigKkxNpiMjzkTYQvLEnwWMObLc1Y,12465
|
|
328
328
|
arelle/plugin/saveSampleInstance.py,sha256=w66Nd4He8yIK4Il_M9qnelpeUJ_6cBBe5q01DanOxEA,23823
|
|
329
|
-
arelle/plugin/streamingExtensions.py,sha256=
|
|
329
|
+
arelle/plugin/streamingExtensions.py,sha256=9W4iQ1u8LFn7-ZEfbqBtuwKiZj-aq8FUXNmj5VawRXQ,47619
|
|
330
330
|
arelle/plugin/systemInfo.py,sha256=Rv_9HmDwkswwBmhxrkz8uAL65J332r-QItTYMSz2Zbc,1641
|
|
331
331
|
arelle/plugin/unpackSecEisFile.py,sha256=TVdYUKhgAZ0145anRi6kBesOxPJEvC5YROO1j-hcuwU,2631
|
|
332
332
|
arelle/plugin/xuleSaver.py,sha256=3eNZAxziFos0YrC5NWezFPsIxN7Ex8jb-CaOVTd8Gw4,30073
|
|
@@ -697,7 +697,7 @@ arelle/scripts-macOS/startWebServer.command,sha256=KXLSwAwchDZBlL-k9PYXdf39RNBtt
|
|
|
697
697
|
arelle/scripts-unix/startWebServer.sh,sha256=_0puRzaGkdMZoFn3R7hDti9a3ryN6kTZAXwLweeZU1s,42
|
|
698
698
|
arelle/scripts-windows/startWebServer.bat,sha256=qmnF1yrjNo__bi4QodONWlN0qHShVLTKptJQYyZtgcY,122
|
|
699
699
|
arelle/utils/PluginData.py,sha256=GUnuZaApm1J4Xm9ZA1U2M1aask-AaNGviLtc0fgXbFg,265
|
|
700
|
-
arelle/utils/PluginHooks.py,sha256=
|
|
700
|
+
arelle/utils/PluginHooks.py,sha256=nqL5NdW8yea0cMqePSf4TbNK1IU6jbqIwBX18Ar2n2A,31189
|
|
701
701
|
arelle/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
702
702
|
arelle/utils/validate/Decorator.py,sha256=8LGmA171HZgKrALtsMKyHqMNM-XCdwJOv6KpZz4pC2c,3161
|
|
703
703
|
arelle/utils/validate/DetectScriptsInXhtml.py,sha256=JOgsUP0_kvE6O3TuhzKxqKG1ZFP9LrUYZBgrar6JEm0,2178
|
|
@@ -706,7 +706,7 @@ arelle/utils/validate/ValidationPlugin.py,sha256=_WeRPXZUTCcSN3FLbFwiAe_2pAUTxZZ
|
|
|
706
706
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
707
707
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
708
708
|
arelle/webserver/bottle.py,sha256=676nP8SOB42QscV0WIbXoSV9MwdgvbrzeIApxr6mlUI,171255
|
|
709
|
-
arelle_release-2.36.
|
|
709
|
+
arelle_release-2.36.39.dist-info/licenses/LICENSE.md,sha256=rMbWwFLGzPgLoEjEu8LCmkpWDTqsvfOI-wzLSfeJsis,4107
|
|
710
710
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
711
711
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
712
712
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -1554,8 +1554,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1554
1554
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1555
1555
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=XHABmejQt7RlZ0udh7v42f2Xb2STGk_fSaIaJ9i2xo0,878
|
|
1556
1556
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1557
|
-
arelle_release-2.36.
|
|
1558
|
-
arelle_release-2.36.
|
|
1559
|
-
arelle_release-2.36.
|
|
1560
|
-
arelle_release-2.36.
|
|
1561
|
-
arelle_release-2.36.
|
|
1557
|
+
arelle_release-2.36.39.dist-info/METADATA,sha256=c9ojR4Abp4P4IVQWmfSeE81IdXyq6v3yjXMGOE_E-no,9032
|
|
1558
|
+
arelle_release-2.36.39.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
1559
|
+
arelle_release-2.36.39.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1560
|
+
arelle_release-2.36.39.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1561
|
+
arelle_release-2.36.39.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|