コード例 #1
0
ファイル: ViewAspects.py プロジェクト: Arelle/ArelleApp
def selectAspects(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"Select Aspects", u"""
        def _id = '""" + dbConn.id.strip() + u"""'
        def n = g.v(_id)
        if (!n) {
            def e = g.e(_id)
            if (e && e.label == 'rel')
                n = e.inV.next()
        }
        def _class = n ? n._class : null
        def result = 0
        if (_class == 'data_point') { 
            result = n.out('base_item')[0].id;
        } else if (_class == 'aspect_proxy') {
            result = n.id
        } else if (_class == 'relationship') {
            result = n.out('target')[0].id
        } else if (_class == 'root') {
            result = n.out('aspect')[0].id
        } else if (_class == 'message') {
            result = n.out('message_ref')[0].id
        }
        result
    """)[u"results"]
    dbConn.close()
    return results
コード例 #2
0
ファイル: ViewDTS.py プロジェクト: dogobox/ArelleApp
def viewDTS(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(
        u"View DTS", u"""
        def dtsRows(docs, visited) {
            def rows = []
            docs.each {
                  def row = ['id':it.id,'data':[new File(it.url).getName() + '-' + it.document_type]]
                  if (!visited.contains(it.url)) {
                    visited.add(it.url)
                    def refs = dtsRows(it.out('referenced_document'), visited)
                    if (refs) {
                        row['rows'] = refs
                    }
                    visited.remove(it.url)
                  rows << row
                  }
            }
            rows
        }
        ['rows':dtsRows(g.v(""" + dbConn.accessionId +
        u""").out('entry_document'),new HashSet())]
    """)[u"results"][
            0]  # returned dict from Gremlin is in a list, just want the dict
    dbConn.close()
    return results
コード例 #3
0
ファイル: ViewAccessions.py プロジェクト: dogobox/ArelleApp
def viewAccessions(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"View Accessions", u"""
        def messagesLevelsCount(accessionV) {
            def levelCounts = [:]
            def codetypeCounts = [:]
            accessionV.out('validation_messages').out('message').each {
                if (levelCounts.containsKey(it.level)) {
                    levelCounts[it.level] = levelCounts[it.level] + 1
                } else {
                    levelCounts[it.level] = 1
                }
                def code = it.code.startsWith('xml') ? 'XML' : (it.code.startsWith('xbrl') ? 'XBRL' : (it.code.startsWith('EFM') ? 'EFM' : (it.code.startsWith('US-BPG') ? 'BPG' : null)))
                if (code)
                    if (codetypeCounts.containsKey(code)) {
                        codetypeCounts[code] = codetypeCounts[code] + 1
                    } else {
                        codetypeCounts[code] = 1
                    }
            }
            def l = []
            levelCounts.each{k,v->l<<[k,v].join(' - ')}
            def c = []
            codetypeCounts.each{k,v->c<<[k,v].join(' - ')}
            [l.join(', '), c.join(', ')].join(', ')
        }
        ['rows':g.V('_rlkey', 'semantic_root').out('accessions').out.as('data').as('id').select{it.id}{
            [it.filing_accession_number,
             it.accepted_timestamp,
             it.entry_url,it.creation_software?:'',
             messagesLevelsCount(it)] 
          }]
    """)[u"results"][0]  # returned dict from Gremlin is in a list, just want the dict
    dbConn.close()
    return results
コード例 #4
0
def selectRelationships(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"Select Relationships " + os.path.basename(dbConn.arcrole), u"""
        def n = g.v('""" + dbConn.id + u"""')
        def _class = n ? n._class : null
        def aspectProxy
        def result = 0
        if (_class == 'aspect_proxy') {
            aspectProxy = n
        } else {
            def aspectProxyIt
            if (_class == 'data_point') {
                aspectProxyIt = n.out('base_item')
            } else if (_class == 'relationship') {
                aspectProxyIt = n.out('target')
            } else if (_class == 'message') {
                aspectProxyIt = n.out('message_ref')
            } else {
                aspectProxyIt = n.out('aspect')
            }
            aspectProxy = aspectProxyIt.hasNext() ? aspectProxyIt.next() : null
        }
        if (aspectProxy) {
            relIt = aspectProxy.in('target').in('relationship').has('arcrole','""" + dbConn.arcrole + u"""').back(2)
            result = relIt.hasNext() ? relIt.next().id : 0
        }
        result
    """)[u"results"]
    dbConn.close()
    return results
コード例 #5
0
ファイル: ViewDataPoints.py プロジェクト: Arelle/ArelleApp
def viewDataPoints(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(
        u"View Data Points",
        dbConn.gDefAspectLabel
        + u"""
        ['rows':g.v('"""
        + dbConn.accessionId
        + u"""').out('entry_document')
            .out('data_points').out('data_point')
            .order{it.a.source_line <=> it.b.source_line}
            .as('data').as('id').select{it.id}{
               [aspectLabel(it.out('base_item')[0]),
                   it.source_line,it.context?:'', it.unit?:'',
                   it.effective_value?:it.value?:'']
             }
        ]
    """,
    )[u"results"][
        0
    ]  # returned dict from Gremlin is in a list, just want the dict

    decompressResults(results)
    dbConn.close()
    return results
コード例 #6
0
ファイル: ViewAspects.py プロジェクト: dogobox/ArelleApp
def viewAspects(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(
        u"View Aspects", dbConn.gDefAspectLabel + u"""
        aspectRows = []
        g.v('""" + dbConn.accessionId +
        u"""').out('dts').out('dts_aspect_proxy').
                order{aspectLabel(it.a)<=>aspectLabel(it.b)}.each{
            aspectProxy = it
            label = aspectLabel(it)
            it.in('proxy').each {
                dataTypeIt = it.out('data_type')
                baseTypeIt = it.out('base_xbrli_type')
                aspectRows<<['id':aspectProxy.id,'data':[
                                label,it.name,
                                it.periodType?:'',
                                it.balance?:'',
                                dataTypeIt.hasNext() ? dataTypeIt.next().name : '',
                                baseTypeIt.hasNext() ? baseTypeIt.next().name : '']]
            }
        }
        ['rows':aspectRows]
    """)[u"results"][
            0]  # returned dict from Gremlin is in a list, just want the dict
    dbConn.close()
    return results
コード例 #7
0
ファイル: ViewAspects.py プロジェクト: dogobox/ArelleApp
def selectAspects(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(
        u"Select Aspects", u"""
        def _id = '""" + dbConn.id.strip() + u"""'
        def n = g.v(_id)
        if (!n) {
            def e = g.e(_id)
            if (e && e.label == 'rel')
                n = e.inV.next()
        }
        def _class = n ? n._class : null
        def result = 0
        if (_class == 'data_point') { 
            result = n.out('base_item')[0].id;
        } else if (_class == 'aspect_proxy') {
            result = n.id
        } else if (_class == 'relationship') {
            result = n.out('target')[0].id
        } else if (_class == 'root') {
            result = n.out('aspect')[0].id
        } else if (_class == 'message') {
            result = n.out('message_ref')[0].id
        }
        result
    """)[u"results"]
    dbConn.close()
    return results
コード例 #8
0
ファイル: ViewMessages.py プロジェクト: Arelle/ArelleApp
def viewMessages(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"View Messages", u"""
        ['rows':g.v('""" + dbConn.accessionId + u"""').out('validation_messages').out('message') \
            .order{it.a.seq <=> it.b.seq} \
            .as('data').as('id').select{it.id}{ \
               [it.seq, it.code, it.level, it.text?:''] \
        }]
    """)[u"results"][0]  # returned dict from Gremlin is in a list, just want the dict
    decompressResults(results)
    dbConn.close()
    return results
コード例 #9
0
ファイル: ViewMessages.py プロジェクト: dogobox/ArelleApp
def viewMessages(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(
        u"View Messages", u"""
        ['rows':g.v('""" + dbConn.accessionId +
        u"""').out('validation_messages').out('message') \
            .order{it.a.seq <=> it.b.seq} \
            .as('data').as('id').select{it.id}{ \
               [it.seq, it.code, it.level, it.text?:''] \
        }]
    """)[u"results"][
            0]  # returned dict from Gremlin is in a list, just want the dict
    decompressResults(results)
    dbConn.close()
    return results
コード例 #10
0
ファイル: ViewDataPoints.py プロジェクト: dogobox/ArelleApp
def viewDataPoints(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(
        u"View Data Points", dbConn.gDefAspectLabel + u"""
        ['rows':g.v('""" + dbConn.accessionId + u"""').out('entry_document')
            .out('data_points').out('data_point')
            .order{it.a.source_line <=> it.b.source_line}
            .as('data').as('id').select{it.id}{
               [aspectLabel(it.out('base_item')[0]),
                   it.source_line,it.context?:'', it.unit?:'',
                   it.effective_value?:it.value?:'']
             }
        ]
    """)[u"results"][
            0]  # returned dict from Gremlin is in a list, just want the dict

    decompressResults(results)
    dbConn.close()
    return results
コード例 #11
0
ファイル: ViewDTS.py プロジェクト: Arelle/ArelleApp
def viewDTS(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"View DTS", u"""
        def dtsRows(docs, visited) {
            def rows = []
            docs.each {
                  def row = ['id':it.id,'data':[new File(it.url).getName() + '-' + it.document_type]]
                  if (!visited.contains(it.url)) {
                    visited.add(it.url)
                    def refs = dtsRows(it.out('referenced_document'), visited)
                    if (refs) {
                        row['rows'] = refs
                    }
                    visited.remove(it.url)
                  rows << row
                  }
            }
            rows
        }
        ['rows':dtsRows(g.v(""" + dbConn.accessionId + u""").out('entry_document'),new HashSet())]
    """)[u"results"][0]  # returned dict from Gremlin is in a list, just want the dict
    dbConn.close()
    return results
コード例 #12
0
ファイル: ViewAspects.py プロジェクト: Arelle/ArelleApp
def viewAspects(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"View Aspects", 
        dbConn.gDefAspectLabel + u"""
        aspectRows = []
        g.v('""" + dbConn.accessionId + u"""').out('dts').out('dts_aspect_proxy').
                order{aspectLabel(it.a)<=>aspectLabel(it.b)}.each{
            aspectProxy = it
            label = aspectLabel(it)
            it.in('proxy').each {
                dataTypeIt = it.out('data_type')
                baseTypeIt = it.out('base_xbrli_type')
                aspectRows<<['id':aspectProxy.id,'data':[
                                label,it.name,
                                it.periodType?:'',
                                it.balance?:'',
                                dataTypeIt.hasNext() ? dataTypeIt.next().name : '',
                                baseTypeIt.hasNext() ? baseTypeIt.next().name : '']]
            }
        }
        ['rows':aspectRows]
    """)[u"results"][0]  # returned dict from Gremlin is in a list, just want the dict
    dbConn.close()
    return results
コード例 #13
0
def viewRelationships(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"View Relationships " + os.path.basename(dbConn.arcrole), 
        dbConn.gDefAspectLabel + 
        (u"""
        def relSetRows(relSetId, arcrole, relEs){
            def rows = []
            relEs.each {
                def targetAspectProxyIt = it.inV
                if (targetAspectProxyIt.hasNext()) {
                    def targetAspectProxy = targetAspectProxyIt.next()
                    def data = [aspectLabel(targetAspectProxy)]
                    if (arcrole.endsWith('summation-item')) {
                      data<<it.weight?:''
                      data<< targetAspectProxy.in('proxy').balance ?: ''
                    } else if (arcrole.endsWith('parent-child')) {
                      dataTypeIt = targetAspectProxy.in('proxy').out('data_type')
                      data<< (dataTypeIt.hasNext() ? dataTypeIt.next().name : '')
                    }
                    def row = ['id':it.id,'data':data]
                    if (targetAspectProxy.outE('rel').has('rel_set', relSetId)) {
                        row['rows'] = relSetRows(relSetId, arcrole, 
                                                 targetAspectProxy.outE('rel')
                                                     .has('rel_set', relSetId)
                                                     .order{it.a._order <=> it.b._order})
                    }
                    rows << row
                }
            }
            rows
        }
        def relSetRoots(relSetId, arcrole, rootEs){
            def rootRows = []
            rootEs.each{
                def rootAspectProxyIt = it.inV
                if (rootAspectProxyIt.hasNext()) {
                    def rootAspectProxy = rootAspectProxyIt.next()
                    rootRows << ['id':it.id,
                                 'data':[aspectLabel(rootAspectProxy)],
                                 'rows':relSetRows(relSetId, arcrole,
                                                   rootAspectProxy.outE('rel')
                                                       .has('rel_set', relSetId)
                                                       .order{it.a._order <=> it.b._order})]
               }
            }
            rootRows
        }
        relSets=g.v(""" + dbConn.accessionId + u""").out('dts').out('relationship_sets').out('relationship_set').has('arcrole','""" + dbConn.arcrole + u"""')
        def elrRows = []
        relSets.order{it.a.linkdefinition <=> it.b.linkdefinition}.each{
            elrRows<<['id':it.id,
                     'data':[it.linkdefinition],
                     'rows':relSetRoots(it.id.toInteger(), it.arcrole, it.outE('root'))]
        }
        ['rows':elrRows]
    """ if dbConn.arcrole != u"XBRL-dimensions" else u"""
        def relSetRows(relSetId, linkrole, relEs){
            def rows = []
            relEs.each {
                def targetAspectProxyIt = it.inV
                if (targetAspectProxyIt.hasNext()) {
                    def targetAspectProxy = targetAspectProxyIt.next()
                    def row = ['id':it.id,
                               'data':[aspectLabel(targetAspectProxy),
                                       it.arcrole?:'',
                                       it.cube_closed?:'',
                                       it.aspect_value_usable?:'']]
                    if (targetAspectProxy.outE('rel').has('rel_set', relSetId)) {
                        row['rows'] = relSetRows(it.target_rel_set ?: relSetId,
                                                 it.target_linkrole ?: linkrole,
                                                 targetAspectProxy.outE('rel')
                                                         .has('rel_set', relSetId)
                                                         .order{it.a._order <=> it.b._order})
                    }
                    rows << row
                }
            }
            rows
        }
        def relSetRoots(relSetId, linkrole, rootEs){
            def rootRows = []
            rootEs.each{
                def rootAspectProxyIt = it.inV
                if (rootAspectProxyIt.hasNext()) {
                    def rootAspectProxy = rootAspectProxyIt.next()
                    rootRows << ['id':it.id,
                                 'data':[aspectLabel(rootAspectProxy)],
                                 'rows':relSetRows(relSetId, 
                                                   linkrole, 
                                                   rootAspectProxy.outE('rel')
                                                         .has('rel_set', relSetId)
                                                         .order{it.a._order <=> it.b._order})]
                }
            }
            rootRows
        }
        def relSets=g.v(""" + dbConn.accessionId + u""").out('dts').out('relationship_sets').out('relationship_set').has('arcrole','XBRL-dimensions')
        def elrRows = []
        relSets.order{it.a.linkdefinition <=> it.b.linkdefinition}.each{
            elrRows<<['id':it.id,
                     'data':[it.linkdefinition],
                     'rows':relSetRoots(it.id.toInteger(), it.linkrole, it.outE('root'))]
        }
        ['rows':elrRows]
    """))[u"results"][0]  # returned dict from Gremlin is in a list, just want the dict
    dbConn.close()
    return results
コード例 #14
0
def viewProperties(request):
    dbConn = XbrlSemanticGraphDatabaseConnection(request)
    results = dbConn.execute(u"View Properties", 
        dbConn.gDefAspectLabel + u"""
        def n = null
        def e = null
        def _id = '""" + dbConn.id.strip() + u"""'
        try {
            n = g.v(_id)
            if (!n)
                e = g.e(_id)
        } catch (Exception e1) {
            try {
                e = g.e(_id)
            } catch (Exception e2) {
            }
        }
        def _class = n ? n._class : null
        def _label = e ? e.label : null
        def rows = []
        if (_class == 'data_point') { \
            rows << ['id':1, 'data':['source line', n.source_line]]
            rows << ['id':2, 'data':['base item', aspectLabel(n.out('base_item')[0])]]
            if (n.context) { \
                aspects = []
                n.out('entity_identifier').each { \
                    aspects << ['id':3, 'data':['entity', it.identifier], \
                                'rows':[['id':4, 'data':['scheme', it.scheme]]]]
                }
                n.out('period').each { \
                    if (it.hasNot('forever',null)) { \
                        aspects << ['id':5, 'data':['forever', '']]
                    } else if (it.hasNot('start_date',null)) { \
                        aspects << ['id':5, 'data':['start date', it.start_date]]
                        aspects << ['id':6, 'data':['end date', it.end_date]]
                    } else if (it.hasNot('instant',null)) { \
                        aspects << ['id':5, 'data':['instant', it.instant]]
                    }
                }
                n.out('aspect_value_selection').order{it.a.name <=> it.b.name}.each { \
                    if (it.out('aspect')) { \
                        aspects << ['id':it.id, 'data':[ \
                                        aspectLabel(it.out('aspect')[0]), \
                                        it.out('aspect_value') ? aspectLabel(it.out('aspect_value')[0]) : \
                                                                (it.typed_value?: '')]]
                    }
                }
                rows << ['id':7, 'data':['contextRef', n.context?:''], rows: aspects]
            }
            rows << ['id':8, 'data':['unitRef', n.unit?:'']]
            if (n.precision) {rows << ['id':9, 'data':['precision', n.precision]]}
            if (n.decimals) {rows << ['id':10, 'data':['decimals', n.decimals]]}
            rows << ['id':11, 'data':['value', n.effective_value?:n.value?:'']]
        } else if (_class == 'aspect_proxy') { \
            rows << ['id':1, 'data':['aspect label', aspectLabel(n)]]
            def aspectIt = n.in('proxy')
            if (aspectIt.hasNext()) { \
                aspect = aspectIt.next()
                rows << ['id':2, 'data':['aspect name', aspect.name]]
                dataTypeIt = aspect.out('data_type')
                baseTypeIt = aspect.out('base_xbrli_type')
                rows << ['id':3, 'data':['period type', aspect.periodType?:'']]
                rows << ['id':4, 'data':['balance', aspect.balance?:'']]
                rows << ['id':5, 'data':['data type', dataTypeIt.hasNext() ? dataTypeIt.next().name : '']]
                rows << ['id':6, 'data':['base type', baseTypeIt.hasNext() ? baseTypeIt.next().name : '']]
            }
        } else if (_label == 'rel') { \
            def a = e.inV.next()
            rows << ['id':1, 'data':['aspect label', aspectLabel(a)]]
            def aspectIt = a.in('proxy')
            if (aspectIt.hasNext()) { \
                aspect = aspectIt.next()
                rows << ['id':2, 'data':['aspect name', aspect.name]]
                dataTypeIt = aspect.out('data_type')
                baseTypeIt = aspect.out('base_xbrli_type')
                rows << ['id':3, 'data':['period type', aspect.periodType?:'']]
                rows << ['id':4, 'data':['balance', aspect.balance?:'']]
                rows << ['id':5, 'data':['data type', dataTypeIt.hasNext() ? dataTypeIt.next().name : '']]
                rows << ['id':6, 'data':['base type', baseTypeIt.hasNext() ? baseTypeIt.next().name : '']]
            }
            def relSet = g.v(e.rel_set)
            rows << ['id':7, 'data':['linkrole', relSet.linkrole?:'']]
            rows << ['id':8, 'data':['definition', relSet.linkdefinition?:'']]
            rows << ['id':9, 'data':['arcrole', relSet.arcrole?:'']]
            if (e.hasNot('preferred_label', null)) { \
                rows << ['id':10, 'data':['preferred label', e.preferred_label?:'']]
            }
        } else if (_label == 'root') { \
            def a = e.inV.next()
            def aspectIt = e.out('aspect').in('proxy')
            if (aspectIt.hasNext()) { \
                aspect = aspectIt.next()
                rows << ['id':1, 'data':['aspect label', aspectLabel(aspect)]]
                rows << ['id':2, 'data':['aspect name', aspect.name]]
                dataTypeIt = aspect.out('data_type')
                baseTypeIt = aspect.out('base_xbrli_type')
                rows << ['id':3, 'data':['period type', aspect.periodType?:'']]
                rows << ['id':4, 'data':['balance', aspect.balance?:'']]
                rows << ['id':5, 'data':['data type', dataTypeIt.hasNext() ? dataTypeIt.next().name : '']]
                rows << ['id':6, 'data':['base type', baseTypeIt.hasNext() ? baseTypeIt.next().name : '']]
            }
            def relSetIt = e.inV
            if (relSetIt.hasNext()) { \
                relSet = relSetIt.next()
                rows << ['id':7, 'data':['linkrole', relSet.linkrole?:'']]
                rows << ['id':8, 'data':['definition', relSet.linkdefinition?:'']]
                rows << ['id':9, 'data':['arcrole', relSet.arcrole?:'']]
            }
        }
        ['rows':rows]
    """)[u"results"][0]  # returned dict from Gremlin is in a list, just want the dict
    decompressResults(results)
    dbConn.close()
    return results