def commitUpdates(updates, testing=True): ''' sends the updates to the odok database @input: dictionary where each entry is labelled with the main_table id and consists of a dictionary where each entry is labeled by the relevant column ''' # write to database from odokWriter import odokWriter odokOut = odokWriter(testing=testing) for key, changes in updates.iteritems(): odokOut.uppdateTable('main', key, changes) odokOut.closeConnections() print 'Done!'
def odokArtists(artistDict, wikidataList): ''' checks for corresponding artists to wikidata entries. Returns a list of updates to be committed to artist_links ''' from odokWriter import odokWriter odokConnection = odokWriter() odokResults = odokConnection.findInArtist('wiki', wikidataList) # match any that already existing matched = {} for k, v in artistDict.iteritems(): if v['wikidata'] in odokResults.keys(): odokId = odokResults[v['wikidata']]['id'] v['odokId'] = odokId matched[str(odokId)] = v['ids'][:] # remove any links which already exist in artist_links odokResults = odokConnection.findArtistLinks('artist', matched.keys()) for k, v in artistDict.iteritems(): if 'odokId' in v.keys(): odokId = str(v['odokId']) if odokId in odokResults.keys(): odokObjs = odokResults[odokId] for o in odokObjs: if o in v['ids']: v['ids'].remove(o) matched[odokId].remove(o) # add remaining matches to artist_links for k, vals in matched.iteritems(): for v in vals: odokConnection.insertIntoTable('artist_links', { 'object': v, 'artist': int(k) }) odokConnection.closeConnections() # now remove these from artist for k, v in artistDict.iteritems(): if 'odokId' in v.keys(): odokObjs = matched[str(v['odokId'])] for o in odokObjs: if o in v['ids']: v['ids'].remove(o) print 'Done updating artist_links!'
def odokArtists(artistDict, wikidataList): ''' checks for corresponding artists to wikidata entries. Returns a list of updates to be committed to artist_links ''' from odokWriter import odokWriter odokConnection = odokWriter() odokResults = odokConnection.findInArtist('wiki', wikidataList) # match any that already existing matched = {} for k, v in artistDict.iteritems(): if v['wikidata'] in odokResults.keys(): odokId = odokResults[v['wikidata']]['id'] v['odokId'] = odokId matched[str(odokId)] = v['ids'][:] # remove any links which already exist in artist_links odokResults = odokConnection.findArtistLinks('artist', matched.keys()) for k, v in artistDict.iteritems(): if 'odokId' in v.keys(): odokId = str(v['odokId']) if odokId in odokResults.keys(): odokObjs = odokResults[odokId] for o in odokObjs: if o in v['ids']: v['ids'].remove(o) matched[odokId].remove(o) # add remaining matches to artist_links for k, vals in matched.iteritems(): for v in vals: odokConnection.insertIntoTable('artist_links', {'object': v, 'artist': int(k)}) odokConnection.closeConnections() # now remove these from artist for k, v in artistDict.iteritems(): if 'odokId' in v.keys(): odokObjs = matched[str(v['odokId'])] for o in odokObjs: if o in v['ids']: v['ids'].remove(o) print 'Done updating artist_links!'