def generateTaxonReport(tNode, results, subDirectory): workingResults = subsetResults(taxonId=int(tNode['index'])) fn = "report.html" baseDir = os.path.join(reportDir, subDirectory) print baseDir # Make directory if it does not exist if not os.path.exists(baseDir): os.makedirs(baseDir) outFn = os.path.join(baseDir, fn) with open(outFn, 'w') as outF: outF.write('<html>\n') outF.write(' <head>\n') outF.write(' <title>Report for %s - %s</title>\n' % (tNode['rank'], tNode['name'])) outF.write(' </head>\n') outF.write(' <body>\n') outF.write(' <h1>%s - %s</h1>\n' % (tNode['rank'], tNode['name'])) if tNode.has_key('taxon_name'): outF.write(' <h3>Taxon Name: %s</h3>\n' % tNode['taxon_name']) outF.write(' <br /><br />\n') # Write out children if tNode.has_key('children'): outF.write(' <h2>Children</h2>\n') outF.write(' <ul>\n') for child in tNode['children']: sDir = '%s/%s' % (subDirectory, child['name']) try: outF.write(' <li><a href="%s/report.html">%s</a></li>\n' % (sDir, child['name'])) except: pass generateTaxonReport(child, results, sDir) outF.write(' </ul>\n') outF.write(' <br /><br />\n') # Global top 10 top10 = getHighestCounts(workingResults) outF.write(' <h2>Global Top 10</h2>\n') outF.write(' <ol>\n') for r in top10: try: outF.write(' <li>%s : %s</li>\n' % (PROVIDERS[r[0]], r[3])) except: pass outF.write(' </ol>\n') outF.write(' <br /><br />\n') # For each continent outF.write(' <h2>Continents Top 10</h2>\n') for k in CONTINENTS_LOOKUP: regionId = CONTINENTS_LOOKUP[k] continentTop10 = getHighestCounts(subsetResults(results=workingResults, regionId=regionId)) if len(continentTop10) > 0: outF.write(' <h3>%s</h3>\n' % k) outF.write(' <ol>\n') for r in continentTop10: try: outF.write(' <li>%s : %s</li>\n' % (PROVIDERS[r[0]], r[3])) except: pass outF.write(' </ol>\n') outF.write(' <br /><br />') outF.write(' <br /><br />\n') # For each country outF.write(' <h2>Countries Top 10</h2>\n') for k in COUNTRIES_LOOKUP: regionId = COUNTRIES_LOOKUP[k] countryTop10 = getHighestCounts(subsetResults(results=workingResults, regionId=regionId)) if len(countryTop10) > 0: outF.write(' <h3>%s</h3>\n' % k) outF.write(' <ol>\n') for r in countryTop10: try: outF.write(' <li>%s : %s</li>\n' % (PROVIDERS[r[0]], r[3])) except: pass outF.write(' </ol>\n') outF.write(' <br /><br />\n') outF.write(' <br /><br />\n') # For each state outF.write(' <h2>States Top 10</h2>\n') for k in STATES_LOOKUP: regionId = STATES_LOOKUP[k] statesTop10 = getHighestCounts(subsetResults(results=workingResults, regionId=regionId)) if len(statesTop10) > 0: outF.write(' <h3>%s</h3>\n' % k) outF.write(' <ol>\n') for r in statesTop10: try: outF.write(' <li>%s : %s</li>\n' % (PROVIDERS[r[0]], r[3])) except: pass outF.write(' </ol>\n') outF.write(' <br /><br />\n') # For each ocean outF.write(' <h2>Oceans Top 10</h2>\n') for k in OCEANS_LOOKUP: regionId = OCEANS_LOOKUP[k] oceansTop10 = getHighestCounts(subsetResults(results=workingResults, regionId=regionId)) if len(oceansTop10) > 0: outF.write(' <h3>%s</h3>\n' % k) outF.write(' <ol>\n') for r in oceansTop10: try: outF.write(' <li>%s : %s</li>\n' % (PROVIDERS[r[0]], r[3])) except: pass outF.write(' </ol>\n') outF.write(' <br /><br />\n') outF.write(' </body>\n') outF.write('</html>')
outF.write(' <br /><br />\n') # For each ocean outF.write(' <h2>Oceans Top 10</h2>\n') for k in OCEANS_LOOKUP: regionId = OCEANS_LOOKUP[k] oceansTop10 = getHighestCounts(subsetResults(results=workingResults, regionId=regionId)) if len(oceansTop10) > 0: outF.write(' <h3>%s</h3>\n' % k) outF.write(' <ol>\n') for r in oceansTop10: try: outF.write(' <li>%s : %s</li>\n' % (PROVIDERS[r[0]], r[3])) except: pass outF.write(' </ol>\n') outF.write(' <br /><br />\n') outF.write(' </body>\n') outF.write('</html>') # ............................................................................. if __name__ == "__main__": import json taxTreeFn = "/home/cjgrady/workspace/occDataMiningPOC/data/taxonTree/fishTaxa.json" # May need to make directories first with open(taxTreeFn) as taxF: taxonTree = json.load(taxF) results = subsetResults() generateTaxonReport(taxonTree, results, reportDir)