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
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
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
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
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
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
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
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
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
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
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
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
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
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