def testcaseVariationReportPackageIxds(filesource): # single report directory reportFiles = [] ixdsDirFiles = defaultdict(list) reportDir = "*uninitialized*" reportDirLen = 0 for f in filesource.dir: if f.endswith("/reports/") and reportDir == "*uninitialized*": reportDir = f reportDirLen = len(f) elif f.startswith(reportDir): if "/" not in f[reportDirLen:]: reportFiles.append(f) else: ixdsDir, _sep, ixdsFile = f.rpartition("/") if ixdsFile: filesource.select(f) if Type.identify(filesource, filesource.url) == Type.INLINEXBRL: ixdsDirFiles[ixdsDir].append(f) for ixdsDir, ixdsFiles in sorted(ixdsDirFiles.items()): # use the first ixds in report package docsetSurrogatePath = os.path.join(filesource.baseurl, ixdsDir, IXDS_SURROGATE) return docsetSurrogatePath + IXDS_DOC_SEPARATOR.join( os.path.join(filesource.baseurl, f) for f in ixdsFiles) for f in reportFiles: filesource.select(f) if Type.identify(filesource, filesource.url) in (Type.INSTANCE, Type.INLINEXBRL): # return the first inline doc return f return None
def testcaseVariationReadMeFirstUris(modelTestcaseVariation): _readMeFirstUris = [os.path.join(modelTestcaseVariation.modelDocument.filepathdir, elt.text.strip()) for elt in modelTestcaseVariation.iterdescendants() if isinstance(elt,ModelObject) and elt.get("readMeFirst") == "true"] if len(_readMeFirstUris) >= MINIMUM_IXDS_DOC_COUNT and all( Type.identify(modelTestcaseVariation.modelXbrl.fileSource, f) == Type.INLINEXBRL for f in _readMeFirstUris): docsetSurrogatePath = os.path.join(os.path.dirname(_readMeFirstUris[0]), IXDS_SURROGATE) modelTestcaseVariation._readMeFirstUris = [docsetSurrogatePath + IXDS_DOC_SEPARATOR.join(_readMeFirstUris)] return True
def commandLineFilingStart(cntlr, options, filesource, entrypointFiles, *args, **kwargs): global skipExpectedInstanceComparison skipExpectedInstanceComparison = getattr(options, "skipExpectedInstanceComparison", False) if isinstance(entrypointFiles, list): # check for any inlineDocumentSet in list for entrypointFile in entrypointFiles: _ixds = entrypointFile.get("ixds") if isinstance(_ixds, list): # build file surrogate for inline document set _files = [e["file"] for e in _ixds if isinstance(e, dict)] if len(_files) == 1: urlsByType = {} if os.path.isfile(_files[0]) and any(_files[0].endswith(e) for e in (".zip", ".ZIP", ".tar.gz" )): # check if an archive file filesource = FileSource.openFileSource(_files[0], cntlr) if filesource.isArchive: for _archiveFile in (filesource.dir or ()): # .dir might be none if IOerror filesource.select(_archiveFile) identifiedType = Type.identify(filesource, filesource.url) if identifiedType in (Type.INSTANCE, Type.INLINEXBRL): urlsByType.setdefault(identifiedType, []).append(filesource.url) filesource.close() elif os.path.isdir(_files[0]): _fileDir = _files[0] for _localName in os.listdir(_fileDir): _file = os.path.join(_fileDir, _localName) if os.path.isfile(_file): filesource = FileSource.openFileSource(_file, cntlr) identifiedType = Type.identify(filesource, filesource.url) if identifiedType in (Type.INSTANCE, Type.INLINEXBRL): urlsByType.setdefault(identifiedType, []).append(filesource.url) filesource.close() if urlsByType: _files = [] # use inline instances, if any, else non-inline instances for identifiedType in (Type.INLINEXBRL, Type.INSTANCE): for url in urlsByType.get(identifiedType, []): _files.append(url) if _files: break # found inline (or non-inline) entrypoint files, don't look for any other type if len(_files) > 0: docsetSurrogatePath = os.path.join(os.path.dirname(_files[0]), IXDS_SURROGATE) entrypointFile["file"] = docsetSurrogatePath + IXDS_DOC_SEPARATOR.join(_files)