예제 #1
0
def loadModule(moduleInfo):
    name = moduleInfo['name']
    moduleURL = moduleInfo['moduleURL']
    moduleFilename = _cntlr.webCache.getfilename(moduleURL, normalize=True, base=_pluginBase)
    if moduleFilename:
        try:
            if os.path.isdir(moduleFilename) and os.path.isfile(os.path.join(moduleFilename, "__init__.py")):
                moduleDir = os.path.dirname(moduleFilename)
                moduleName = os.path.basename(moduleFilename)
            else:
                moduleName = os.path.basename(moduleFilename).partition('.')[0]
                moduleDir = os.path.dirname(moduleFilename)
            file, path, description = imp.find_module(moduleName, [moduleDir])
            if file or path: # file returned if non-package module, otherwise just path for package
                try:
                    module = imp.load_module(moduleName, file, path, description)
                    pluginInfo = module.__pluginInfo__.copy()
                    elementSubstitutionClasses = None
                    if name == pluginInfo.get('name'):
                        pluginInfo["moduleURL"] = moduleURL
                        modulePluginInfos[name] = pluginInfo
                        if 'localeURL' in pluginInfo:
                            # set L10N internationalization in loaded module
                            localeDir = os.path.dirname(module.__file__) + os.sep + pluginInfo['localeURL']
                            try:
                                _gettext = gettext.translation(pluginInfo['localeDomain'], localeDir, getLanguageCodes())
                            except IOError:
                                _gettext = lambda x: x # no translation
                        else:
                            _gettext = lambda x: x
                        for key, value in pluginInfo.items():
                            if key == 'name':
                                if name:
                                    pluginConfig['modules'][name] = moduleInfo
                            elif isinstance(value, types.FunctionType):
                                classModuleNames = pluginConfig['classes'].setdefault(key, [])
                                if name and name not in classModuleNames:
                                    classModuleNames.append(name)
                            if key == 'ModelObjectFactory.ElementSubstitutionClasses':
                                elementSubstitutionClasses = value
                        module._ = _gettext
                        global pluginConfigChanged
                        pluginConfigChanged = True
                    if elementSubstitutionClasses:
                        try:
                            from arelle.ModelObjectFactory import elementSubstitutionModelClass
                            elementSubstitutionModelClass.update(elementSubstitutionClasses)
                        except Exception as err:
                            print(_("Exception loading plug-in {name}: processing ModelObjectFactory.ElementSubstitutionClasses").format(
                                    name=name, error=err), file=sys.stderr)
                except (ImportError, AttributeError) as err:
                    print(_("Exception loading plug-in {name}: {error}").format(
                            name=name, error=err), file=sys.stderr)
                finally:
                    if file:
                        file.close() # non-package module
        except (EnvironmentError, ImportError, NameError) as err: #find_module failed, no file to close
            print(_("Exception finding plug-in {name}: {error}").format(
                    name=name, error=err), file=sys.stderr)
예제 #2
0
        of multiply measures, and if any divide, a '/' character and list of string qnames 
        of divide measure qnames."""
        mul, div = self.measures
        return ' '.join([measuresStr(m) for m in mul] + (['/'] + [measuresStr(d) for d in div] if div else []))

    @property
    def propertyView(self):
        measures = self.measures
        if measures[1]:
            return tuple(('mul',m) for m in measures[0]) + \
                   tuple(('div',d) for d in measures[1]) 
        else:
            return tuple(('measure',m) for m in measures[0])

from arelle.ModelFormulaObject import Aspect
from arelle import FunctionIxt
           
from arelle.ModelObjectFactory import elementSubstitutionModelClass
elementSubstitutionModelClass.update((
     (XbrlConst.qnXbrliItem, ModelFact),
     (XbrlConst.qnXbrliTuple, ModelFact),
     (XbrlConst.qnIXbrlTuple, ModelInlineFact),
     (XbrlConst.qnIXbrlNonNumeric, ModelInlineFact),
     (XbrlConst.qnIXbrlNonFraction, ModelInlineFact),
     (XbrlConst.qnIXbrlFraction, ModelInlineFact),
     (XbrlConst.qnXbrliContext, ModelContext),
     (XbrlConst.qnXbrldiExplicitMember, ModelDimensionValue),
     (XbrlConst.qnXbrldiTypedMember, ModelDimensionValue),
     (XbrlConst.qnXbrliUnit, ModelUnit),
    ))
예제 #3
0
elementSubstitutionModelClass.update((
    (qname(XbrlConst.ver, "assignment"), ModelAssignment),
    (qname(XbrlConst.ver, "action"), ModelAction),
    (qname(XbrlConst.ver, "namespaceRename"), ModelNamespaceRename),
    (qname(XbrlConst.ver, "roleChange"), ModelRoleChange),
    # 2010 names
    (qname(XbrlConst.vercb, "conceptAdd"), ModelConceptUseChange),
    (qname(XbrlConst.vercb, "conceptDelete"), ModelConceptUseChange),
    (qname(XbrlConst.vercb, "conceptRename"), ModelConceptUseChange),
    (qname(XbrlConst.verce, "conceptIDChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptSubstitutionGroupChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptDefaultChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptNillableChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptAbstractChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptBlockChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptFixedChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptFinalChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptPeriodTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptBalanceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptAttributeAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptAttributeDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptAttributeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "tupleContentModelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptLabelAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptLabelDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptLabelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptReferenceAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptReferenceDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptReferenceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verrels, "relationshipSetModelChange"), ModelRelationshipSetChange),
    (qname(XbrlConst.verrels, "relationshipSetModelAdd"), ModelRelationshipSetChange),
    (qname(XbrlConst.verrels, "relationshipSetModelDelete"), ModelRelationshipSetChange),
    (qname(XbrlConst.verrels, "fromRelationshipSet"), ModelRelationshipSet),
    (qname(XbrlConst.verrels, "toRelationshipSet"), ModelRelationshipSet),
    (qname(XbrlConst.verrels, "relationships"), ModelRelationships),
    (qname(XbrlConst.veria, "aspectModelChange"), ModelInstanceAspectsChange),
    (qname(XbrlConst.veria, "aspectModelAdd"), ModelInstanceAspectsChange),
    (qname(XbrlConst.veria, "aspectModelDelete"), ModelInstanceAspectsChange),
    (qname(XbrlConst.veria, "fromAspects"), ModelInstanceAspects),
    (qname(XbrlConst.veria, "toAspects"), ModelInstanceAspects),
    (qname(XbrlConst.veria, "concept"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "explicitDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.veria, "typedDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.veria, "segment"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "scenario"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "entityIdentifier"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "period"), ModelPeriodAspect),
    (qname(XbrlConst.veria, "location"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "unit"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "member"), ModelRelatedConcept),
    (qname(XbrlConst.veria, "startDate"), ModelRelatedConcept),
    (qname(XbrlConst.veria, "endDate"), ModelAspectProperty),
    (qname(XbrlConst.veria, "instant"), ModelAspectProperty),
    (qname(XbrlConst.veria, "forever"), ModelAspectProperty),
    (qname(XbrlConst.veria, "multiplyBy"), ModelMeasureAspect),
    (qname(XbrlConst.veria, "divideBy"), ModelMeasureAspect),
    (qname(XbrlConst.veria, "measure"), ModelAspectProperty),
    # 2012 names
    (qname(XbrlConst.vercu, "conceptAdd"), ModelConceptUseChange),
    (qname(XbrlConst.vercu, "conceptDelete"), ModelConceptUseChange),
    (qname(XbrlConst.vercu, "conceptRename"), ModelConceptUseChange),
    (qname(XbrlConst.vercd, "conceptIDChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptSubstitutionGroupChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptDefaultChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptNillableChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptAbstractChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptBlockChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptFixedChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptFinalChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptPeriodTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptBalanceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptAttributeAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptAttributeDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptAttributeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "attributeDefinitionChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "tupleContentModelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptLabelAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptLabelDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptLabelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptReferenceAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptReferenceDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptReferenceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verdim, "aspectModelChange"), ModelInstanceAspectsChange),
    (qname(XbrlConst.verdim, "aspectModelAdd"), ModelInstanceAspectsChange),
    (qname(XbrlConst.verdim, "aspectModelDelete"), ModelInstanceAspectsChange),
    (qname(XbrlConst.verdim, "fromAspects"), ModelInstanceAspects),
    (qname(XbrlConst.verdim, "toAspects"), ModelInstanceAspects),
    (qname(XbrlConst.verdim, "concepts"), ModelConceptsDimsAspect),
    (qname(XbrlConst.verdim, "explicitDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.verdim, "typedDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.verdim, "concept"), ModelRelatedConcept),
    (qname(XbrlConst.verdim, "member"), ModelRelatedConcept),
     ))
예제 #4
0
                ("preferredLabel", self.preferredLabel)  if self.arcrole == XbrlConst.parentChild and self.preferredLabel else (),
                ("contextElement", self.contextElement)  if self.arcrole in (XbrlConst.all, XbrlConst.notAll)  else (),
                ("typedDomain", self.toModelObject.typedDomainElement.qname)  
                  if self.arcrole == XbrlConst.hypercubeDimension and
                     isinstance(self.toModelObject,ModelConcept) and
                     self.toModelObject.isTypedDimension and 
                     self.toModelObject.typedDomainElement is not None  else (),
                ("closed", self.closed) if self.arcrole in (XbrlConst.all, XbrlConst.notAll)  else (),
                ("usable", self.usable) if self.arcrole == XbrlConst.domainMember  else (),
                ("targetRole", self.targetRole) if self.arcrole.startswith(XbrlConst.dimStartsWith) else (),
                ("order", self.order),
                ("priority", self.priority))
        
    def __repr__(self):
        return ("modelRelationship[{0}]{1})".format(self.objectId(),self.propertyView))

    @property
    def viewConcept(self):
        if isinstance(self.toModelObject, ModelConcept):
            return self.toModelObject
        elif isinstance(self.fromModelObject, ModelConcept):
            return self.fromModelObject
        return None
           
from arelle.ModelObjectFactory import elementSubstitutionModelClass
elementSubstitutionModelClass.update((
     (XbrlConst.qnXlExtended, ModelLink),
     (XbrlConst.qnXlLocator, ModelLocator),
     (XbrlConst.qnXlResource, ModelResource),
    ))
예제 #5
0
def loadModule(moduleInfo, packagePrefix=""):
    name = moduleInfo['name']
    moduleURL = moduleInfo['moduleURL']
    moduleFilename = _cntlr.webCache.getfilename(moduleURL,
                                                 normalize=True,
                                                 base=_pluginBase)
    if moduleFilename:
        try:
            if os.path.basename(
                    moduleFilename) == "__init__.py" and os.path.isfile(
                        moduleFilename):
                moduleFilename = os.path.dirname(
                    moduleFilename)  # want just the dirpart of package
            if os.path.isdir(moduleFilename) and os.path.isfile(
                    os.path.join(moduleFilename, "__init__.py")):
                moduleDir = os.path.dirname(moduleFilename)
                moduleName = os.path.basename(moduleFilename)
                packageImportPrefix = moduleName + "."
            else:
                moduleName = os.path.basename(moduleFilename).partition('.')[0]
                moduleDir = os.path.dirname(moduleFilename)
                packageImportPrefix = packagePrefix
            file, path, description = imp.find_module(moduleName, [moduleDir])
            if file or path:  # file returned if non-package module, otherwise just path for package
                try:
                    module = imp.load_module(packagePrefix + moduleName, file,
                                             path, description)
                    pluginInfo = module.__pluginInfo__.copy()
                    elementSubstitutionClasses = None
                    if name == pluginInfo.get('name'):
                        pluginInfo["moduleURL"] = moduleURL
                        modulePluginInfos[name] = pluginInfo
                        if 'localeURL' in pluginInfo:
                            # set L10N internationalization in loaded module
                            localeDir = os.path.dirname(
                                module.__file__
                            ) + os.sep + pluginInfo['localeURL']
                            try:
                                _gettext = gettext.translation(
                                    pluginInfo['localeDomain'], localeDir,
                                    getLanguageCodes())
                            except IOError:
                                _gettext = lambda x: x  # no translation
                        else:
                            _gettext = lambda x: x
                        for key, value in pluginInfo.items():
                            if key == 'name':
                                if name:
                                    pluginConfig['modules'][name] = moduleInfo
                            elif isinstance(value, types.FunctionType):
                                classModuleNames = pluginConfig[
                                    'classes'].setdefault(key, [])
                                if name and name not in classModuleNames:
                                    classModuleNames.append(name)
                            if key == 'ModelObjectFactory.ElementSubstitutionClasses':
                                elementSubstitutionClasses = value
                        module._ = _gettext
                        global pluginConfigChanged
                        pluginConfigChanged = True
                    if elementSubstitutionClasses:
                        try:
                            from arelle.ModelObjectFactory import elementSubstitutionModelClass
                            elementSubstitutionModelClass.update(
                                elementSubstitutionClasses)
                        except Exception as err:
                            _msg = _(
                                "Exception loading plug-in {name}: processing ModelObjectFactory.ElementSubstitutionClasses"
                            ).format(name=name, error=err)
                            if PLUGIN_TRACE_FILE:
                                with open(PLUGIN_TRACE_FILE,
                                          "at",
                                          encoding='utf-8') as fh:
                                    fh.write(_msg + '\n')
                            else:
                                print(_msg, file=sys.stderr)
                    for importModuleInfo in moduleInfo.get(
                            'imports', EMPTYLIST):
                        loadModule(importModuleInfo, packageImportPrefix)
                except (ImportError, AttributeError, SystemError) as err:
                    _msg = _(
                        "Exception loading plug-in {name}: {error}\n{traceback}"
                    ).format(name=name,
                             error=err,
                             traceback=traceback.format_tb(sys.exc_info()[2]))
                    if PLUGIN_TRACE_FILE:
                        with open(PLUGIN_TRACE_FILE, "at",
                                  encoding='utf-8') as fh:
                            fh.write(_msg + '\n')
                    else:
                        print(_msg, file=sys.stderr)

                finally:
                    if file:
                        file.close()  # non-package module
        except (EnvironmentError, ImportError, NameError,
                SyntaxError) as err:  #find_module failed, no file to close
            _msg = _("Exception finding plug-in {name}: {error}").format(
                name=name, error=err)
            if PLUGIN_TRACE_FILE:
                with open(PLUGIN_TRACE_FILE, "at", encoding='utf-8') as fh:
                    fh.write(_msg + '\n')
            else:
                print(_msg, file=sys.stderr)
예제 #6
0
def loadModule(moduleInfo):
    name = moduleInfo['name']
    moduleURL = moduleInfo['moduleURL']
    moduleFilename = _cntlr.webCache.getfilename(moduleURL,
                                                 normalize=True,
                                                 base=_pluginBase)
    if moduleFilename:
        try:
            if os.path.isdir(moduleFilename) and os.path.isfile(
                    os.path.join(moduleFilename, "__init__.py")):
                moduleDir = os.path.dirname(moduleFilename)
                moduleName = os.path.basename(moduleFilename)
            else:
                moduleName = os.path.basename(moduleFilename).partition('.')[0]
                moduleDir = os.path.dirname(moduleFilename)
            file, path, description = imp.find_module(moduleName, [moduleDir])
            if file or path:  # file returned if non-package module, otherwise just path for package
                try:
                    module = imp.load_module(moduleName, file, path,
                                             description)
                    pluginInfo = module.__pluginInfo__.copy()
                    elementSubstitutionClasses = None
                    if name == pluginInfo.get('name'):
                        pluginInfo["moduleURL"] = moduleURL
                        modulePluginInfos[name] = pluginInfo
                        if 'localeURL' in pluginInfo:
                            # set L10N internationalization in loaded module
                            localeDir = os.path.dirname(
                                module.__file__
                            ) + os.sep + pluginInfo['localeURL']
                            try:
                                _gettext = gettext.translation(
                                    pluginInfo['localeDomain'], localeDir,
                                    getLanguageCodes())
                            except IOError:
                                _gettext = lambda x: x  # no translation
                        else:
                            _gettext = lambda x: x
                        for key, value in pluginInfo.items():
                            if key == 'name':
                                if name:
                                    pluginConfig['modules'][name] = moduleInfo
                            elif isinstance(value, types.FunctionType):
                                classModuleNames = pluginConfig[
                                    'classes'].setdefault(key, [])
                                if name and name not in classModuleNames:
                                    classModuleNames.append(name)
                            if key == 'ModelObjectFactory.ElementSubstitutionClasses':
                                elementSubstitutionClasses = value
                        module._ = _gettext
                        global pluginConfigChanged
                        pluginConfigChanged = True
                    if elementSubstitutionClasses:
                        try:
                            from arelle.ModelObjectFactory import elementSubstitutionModelClass
                            elementSubstitutionModelClass.update(
                                elementSubstitutionClasses)
                        except Exception as err:
                            print(_(
                                "Exception loading plug-in {name}: processing ModelObjectFactory.ElementSubstitutionClasses"
                            ).format(name=name, error=err),
                                  file=sys.stderr)
                except (ImportError, AttributeError) as err:
                    print(
                        _("Exception loading plug-in {name}: {error}").format(
                            name=name, error=err),
                        file=sys.stderr)
                finally:
                    if file:
                        file.close()  # non-package module
        except (EnvironmentError, ImportError,
                NameError) as err:  #find_module failed, no file to close
            print(_("Exception finding plug-in {name}: {error}").format(
                name=name, error=err),
                  file=sys.stderr)
예제 #7
0
elementSubstitutionModelClass.update((
    # 2010 names
    (qname(XbrlConst.ver10, "assignment"), ModelAssignment),
    (qname(XbrlConst.ver10, "action"), ModelAction),
    (qname(XbrlConst.ver10, "namespaceRename"), ModelNamespaceRename),
    (qname(XbrlConst.ver10, "roleChange"), ModelRoleChange),
    (qname(XbrlConst.vercb, "conceptAdd"), ModelConceptUseChange),
    (qname(XbrlConst.vercb, "conceptDelete"), ModelConceptUseChange),
    (qname(XbrlConst.vercb, "conceptRename"), ModelConceptUseChange),
    (qname(XbrlConst.verce, "conceptIDChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptSubstitutionGroupChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptDefaultChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptNillableChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptAbstractChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptBlockChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptFixedChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptFinalChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptPeriodTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptBalanceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptAttributeAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptAttributeDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptAttributeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "tupleContentModelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptLabelAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptLabelDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptLabelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce, "conceptReferenceAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptReferenceDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.verce,
           "conceptReferenceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verrels,
           "relationshipSetModelChange"), ModelRelationshipSetChange),
    (qname(XbrlConst.verrels,
           "relationshipSetModelAdd"), ModelRelationshipSetChange),
    (qname(XbrlConst.verrels,
           "relationshipSetModelDelete"), ModelRelationshipSetChange),
    (qname(XbrlConst.verrels, "fromRelationshipSet"), ModelRelationshipSet),
    (qname(XbrlConst.verrels, "toRelationshipSet"), ModelRelationshipSet),
    (qname(XbrlConst.verrels, "relationships"), ModelRelationships),
    (qname(XbrlConst.veria, "aspectModelChange"), ModelInstanceAspectsChange),
    (qname(XbrlConst.veria, "aspectModelAdd"), ModelInstanceAspectsChange),
    (qname(XbrlConst.veria, "aspectModelDelete"), ModelInstanceAspectsChange),
    (qname(XbrlConst.veria, "fromAspects"), ModelInstanceAspects),
    (qname(XbrlConst.veria, "toAspects"), ModelInstanceAspects),
    (qname(XbrlConst.veria, "concept"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "explicitDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.veria, "typedDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.veria, "segment"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "scenario"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "entityIdentifier"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "period"), ModelPeriodAspect),
    (qname(XbrlConst.veria, "location"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "unit"), ModelInstanceAspect),
    (qname(XbrlConst.veria, "member"), ModelRelatedConcept),
    (qname(XbrlConst.veria, "startDate"), ModelRelatedConcept),
    (qname(XbrlConst.veria, "endDate"), ModelAspectProperty),
    (qname(XbrlConst.veria, "instant"), ModelAspectProperty),
    (qname(XbrlConst.veria, "forever"), ModelAspectProperty),
    (qname(XbrlConst.veria, "multiplyBy"), ModelMeasureAspect),
    (qname(XbrlConst.veria, "divideBy"), ModelMeasureAspect),
    (qname(XbrlConst.veria, "measure"), ModelAspectProperty),
    # 2013 names
    (qname(XbrlConst.ver, "assignment"), ModelAssignment),
    (qname(XbrlConst.ver, "action"), ModelAction),
    (qname(XbrlConst.ver, "namespaceRename"), ModelNamespaceRename),
    (qname(XbrlConst.ver, "roleChange"), ModelRoleChange),
    (qname(XbrlConst.vercu, "conceptAdd"), ModelConceptUseChange),
    (qname(XbrlConst.vercu, "conceptDelete"), ModelConceptUseChange),
    (qname(XbrlConst.vercu, "conceptRename"), ModelConceptUseChange),
    (qname(XbrlConst.vercd, "conceptIDChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptSubstitutionGroupChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptDefaultChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptNillableChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptAbstractChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptBlockChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptFixedChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptFinalChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptPeriodTypeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptBalanceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptAttributeAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptAttributeDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptAttributeChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "attributeDefinitionChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "tupleContentModelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptLabelAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptLabelDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptLabelChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd, "conceptReferenceAdd"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptReferenceDelete"), ModelConceptDetailsChange),
    (qname(XbrlConst.vercd,
           "conceptReferenceChange"), ModelConceptDetailsChange),
    (qname(XbrlConst.verdim, "aspectModelChange"), ModelInstanceAspectsChange),
    (qname(XbrlConst.verdim, "aspectModelAdd"), ModelInstanceAspectsChange),
    (qname(XbrlConst.verdim, "aspectModelDelete"), ModelInstanceAspectsChange),
    (qname(XbrlConst.verdim, "fromAspects"), ModelInstanceAspects),
    (qname(XbrlConst.verdim, "toAspects"), ModelInstanceAspects),
    (qname(XbrlConst.verdim, "concepts"), ModelConceptsDimsAspect),
    (qname(XbrlConst.verdim, "explicitDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.verdim, "typedDimension"), ModelConceptsDimsAspect),
    (qname(XbrlConst.verdim, "concept"), ModelRelatedConcept),
    (qname(XbrlConst.verdim, "member"), ModelRelatedConcept),
))
예제 #8
0
def loadModule(moduleInfo, packagePrefix=""):
    name = moduleInfo['name']
    moduleURL = moduleInfo['moduleURL']
    moduleFilename = _cntlr.webCache.getfilename(moduleURL, normalize=True, base=_pluginBase)
    if moduleFilename:
        try:
            if os.path.basename(moduleFilename) == "__init__.py" and os.path.isfile(moduleFilename):
                moduleFilename = os.path.dirname(moduleFilename) # want just the dirpart of package
            if os.path.isdir(moduleFilename) and os.path.isfile(os.path.join(moduleFilename, "__init__.py")):
                moduleDir = os.path.dirname(moduleFilename)
                moduleName = os.path.basename(moduleFilename)
                packageImportPrefix = moduleName + "."
            else:
                moduleName = os.path.basename(moduleFilename).partition('.')[0]
                moduleDir = os.path.dirname(moduleFilename)
                packageImportPrefix = packagePrefix
            file, path, description = imp.find_module(moduleName, [moduleDir])
            if file or path: # file returned if non-package module, otherwise just path for package
                try:
                    module = imp.load_module(packagePrefix + moduleName, file, path, description)
                    pluginInfo = module.__pluginInfo__.copy()
                    elementSubstitutionClasses = None
                    if name == pluginInfo.get('name'):
                        pluginInfo["moduleURL"] = moduleURL
                        modulePluginInfos[name] = pluginInfo
                        if 'localeURL' in pluginInfo:
                            # set L10N internationalization in loaded module
                            localeDir = os.path.dirname(module.__file__) + os.sep + pluginInfo['localeURL']
                            try:
                                _gettext = gettext.translation(pluginInfo['localeDomain'], localeDir, getLanguageCodes())
                            except IOError:
                                _gettext = lambda x: x # no translation
                        else:
                            _gettext = lambda x: x
                        for key, value in pluginInfo.items():
                            if key == 'name':
                                if name:
                                    pluginConfig['modules'][name] = moduleInfo
                            elif isinstance(value, types.FunctionType):
                                classModuleNames = pluginConfig['classes'].setdefault(key, [])
                                if name and name not in classModuleNames:
                                    classModuleNames.append(name)
                            if key == 'ModelObjectFactory.ElementSubstitutionClasses':
                                elementSubstitutionClasses = value
                        module._ = _gettext
                        global pluginConfigChanged
                        pluginConfigChanged = True
                    if elementSubstitutionClasses:
                        try:
                            from arelle.ModelObjectFactory import elementSubstitutionModelClass
                            elementSubstitutionModelClass.update(elementSubstitutionClasses)
                        except Exception as err:
                            _msg = _("Exception loading plug-in {name}: processing ModelObjectFactory.ElementSubstitutionClasses").format(
                                    name=name, error=err)
                            if PLUGIN_TRACE_FILE:
                                with open(PLUGIN_TRACE_FILE, "at", encoding='utf-8') as fh:
                                    fh.write(_msg + '\n')
                            else:
                                print(_msg, file=sys.stderr)
                    for importModuleInfo in moduleInfo.get('imports', EMPTYLIST):
                        loadModule(importModuleInfo, packageImportPrefix)
                except (ImportError, AttributeError, SystemError) as err:
                    _msg = _("Exception loading plug-in {name}: {error}\n{traceback}").format(
                            name=name, error=err, traceback=traceback.format_tb(sys.exc_info()[2]))
                    if PLUGIN_TRACE_FILE:
                        with open(PLUGIN_TRACE_FILE, "at", encoding='utf-8') as fh:
                            fh.write(_msg + '\n')
                    else:
                        print(_msg, file=sys.stderr)

                finally:
                    if file:
                        file.close() # non-package module
        except (EnvironmentError, ImportError, NameError, SyntaxError) as err: #find_module failed, no file to close
            _msg = _("Exception finding plug-in {name}: {error}").format(name=name, error=err)
            if PLUGIN_TRACE_FILE:
                with open(PLUGIN_TRACE_FILE, "at", encoding='utf-8') as fh:
                    fh.write(_msg + '\n')
            else:
                print(_msg, file=sys.stderr)
예제 #9
0
    def value(self):
        mul, div = self.measures
        return ' '.join([measuresStr(m) for m in mul] +
                        (['/'] + [measuresStr(d) for d in div] if div else []))

    @property
    def propertyView(self):
        if self.isDivide:
            return tuple(('mul',m) for m in self.measures[0]) + \
                   tuple(('div',d) for d in self.measures[1])
        else:
            return tuple(('', m) for m in self.measures[0])


from arelle.ModelFormulaObject import Aspect
from arelle import FunctionIxt

from arelle.ModelObjectFactory import elementSubstitutionModelClass
elementSubstitutionModelClass.update((
    (XbrlConst.qnXbrliItem, ModelFact),
    (XbrlConst.qnXbrliTuple, ModelFact),
    (XbrlConst.qnIXbrlTuple, ModelInlineFact),
    (XbrlConst.qnIXbrlNonNumeric, ModelInlineFact),
    (XbrlConst.qnIXbrlNonFraction, ModelInlineFact),
    (XbrlConst.qnIXbrlFraction, ModelInlineFact),
    (XbrlConst.qnXbrliContext, ModelContext),
    (XbrlConst.qnXbrldiExplicitMember, ModelDimensionValue),
    (XbrlConst.qnXbrldiTypedMember, ModelDimensionValue),
    (XbrlConst.qnXbrliUnit, ModelUnit),
))
예제 #10
0
        filteredFacts = formulaEvaluatorFilterFacts(xpCtx, VariableBinding(xpCtx), 
                                                    facts, self.filterRelationships, None)
        return factsPartitions(xpCtx, filteredFacts, self.aspectsCovered())
        
        

from arelle.ModelObjectFactory import elementSubstitutionModelClass
elementSubstitutionModelClass.update((
    (XbrlConst.qnEuTable, ModelEuTable),
    (XbrlConst.qnEuAxisCoord, ModelEuAxisCoord),
    (XbrlConst.qnTableTable, ModelTable),
    (XbrlConst.qnTableTable2011, ModelTable),
    (XbrlConst.qnTableRuleNode, ModelRuleDefinitionNode),
    (XbrlConst.qnTableRuleAxis2011, ModelRuleDefinitionNode),
    (XbrlConst.qnTableCompositionNode, ModelCompositionDefinitionNode),
    (XbrlConst.qnTableCompositionAxis2011, ModelCompositionDefinitionNode),
    (XbrlConst.qnTableConceptRelationshipNode, ModelConceptRelationshipDefinitionNode),
    (XbrlConst.qnTableConceptRelationshipAxis2011, ModelConceptRelationshipDefinitionNode),
    (XbrlConst.qnTableDimensionRelationshipNode, ModelDimensionRelationshipDefinitionNode),
    (XbrlConst.qnTableDimensionRelationshipAxis2011, ModelDimensionRelationshipDefinitionNode),
    (XbrlConst.qnTableSelectionNode, ModelSelectionDefinitionNode),
    (XbrlConst.qnTableSelectionAxis2011, ModelSelectionDefinitionNode),
    (XbrlConst.qnTableFilterNode, ModelFilterDefinitionNode),
    (XbrlConst.qnTableFilterAxis2011, ModelFilterDefinitionNode),
    (XbrlConst.qnTableTupleNode, ModelTupleDefinitionNode),
    (XbrlConst.qnTableTupleAxis2011, ModelTupleDefinitionNode),
     ))

# import after other modules resolved to prevent circular references
from arelle.FunctionXfi import concept_relationships
예제 #11
0
    @property
    def instant(self):
        return XmlUtil.childAttr(self, XbrlConst.euRend, "timeReference","instant")
    
    @property
    def propertyView(self):
        explicitDims = self.explicitDims
        return (("id", self.id),
                ("xlink:label", self.xlinkLabel),
                ("header label", self.genLabel()),
                ("header doc", self.genLabel(role="http://www.xbrl.org/2008/role/documentation")),
                ("header code", self.genLabel(role="http://www.eurofiling.info/role/2010/coordinate-code")),
                ("primary item", self.primaryItemQname),
                ("dimensions", "({0})".format(len(explicitDims)),
                  tuple((str(dim),str(mem)) for dim,mem in sorted(explicitDims)))
                  if explicitDims else (),
                ("abstract", self.abstract),
                ("instant", self.instant))
        
    def __repr__(self):
        return ("explicitAxisMember[{0}]{1})".format(self.objectId(),self.propertyView))

from arelle.ModelObjectFactory import elementSubstitutionModelClass
elementSubstitutionModelClass.update((
    (XbrlConst.qnEuTable, ModelTable),
    (XbrlConst.qnTableTable, ModelTable),
    (XbrlConst.qnEuAxisCoord, ModelAxisCoord),
    (XbrlConst.qnTableAspectRuleAxis, ModelExplicitAxisMember),
    (XbrlConst.qnTableAspectRuleAxisMember, ModelExplicitAxisMember),
    (XbrlConst.qnTableFilterAxis, ModelExplicitAxisMember),
     ))
예제 #12
0
                  if self.arcrole == XbrlConst.hypercubeDimension and
                     isinstance(self.toModelObject,ModelConcept) and
                     self.toModelObject.isTypedDimension and
                     self.toModelObject.typedDomainElement is not None  else (),
                ("closed", self.closed) if self.arcrole in (XbrlConst.all, XbrlConst.notAll)  else (),
                ("usable", self.usable) if self.arcrole == XbrlConst.domainMember  else (),
                ("targetRole", self.targetRole) if self.arcrole.startswith(XbrlConst.dimStartsWith) else (),
                ("order", self.order),
                ("priority", self.priority))

    def __repr__(self):
        return ("modelRelationship[{0}]{1})".format(self.objectId(),
                                                    self.propertyView))

    @property
    def viewConcept(self):
        if isinstance(self.toModelObject, ModelConcept):
            return self.toModelObject
        elif isinstance(self.fromModelObject, ModelConcept):
            return self.fromModelObject
        return None


from arelle.ModelObjectFactory import elementSubstitutionModelClass

elementSubstitutionModelClass.update((
    (XbrlConst.qnXlExtended, ModelLink),
    (XbrlConst.qnXlLocator, ModelLocator),
    (XbrlConst.qnXlResource, ModelResource),
))