c1d80af4d7921a6f7f08354bc5da7b50a21019e3 lrnassar Mon Nov 14 14:41:41 2022 -0800 Adding the script that will run from otto and create the auto-updating public session thumbnails on the new home page. Refs #29695 diff --git src/utils/qa/buildPublicSessionThumbnailsIndexPage.py src/utils/qa/buildPublicSessionThumbnailsIndexPage.py new file mode 100644 index 0000000..78ef81f --- /dev/null +++ src/utils/qa/buildPublicSessionThumbnailsIndexPage.py @@ -0,0 +1,74 @@ +#!/usr/bin/python3 + +import os, requests, subprocess, sys, argparse + +def parseArgs(): + """ + Parse the command line arguments. + """ + parser = argparse.ArgumentParser(description = __doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + optional = parser._action_groups.pop() + + required = parser.add_argument_group('required arguments') + + required.add_argument ("saveDir", + help = "Server from which to query the hubPublic table. Can be dev, hgwbeta, or rr.") + if (len(sys.argv) == 1): + parser.print_usage() + print("\nFetches thumbnails and descriptions of public sessions from the RR and saves/creates\n" + \ + "an html page that can be included in the homepage. Requires the directory in which to save\n" + \ + "the pages to be declared.\n\n" + \ + "Example run:\n" + \ + " buildPublicSessionThumbnailsIndexPage /cluster/home/lrnassar/kent/src/hg/htdocs/\n") + exit(0) + parser._action_groups.append(optional) + options = parser.parse_args() + return options + +def bash(cmd): + """Run the cmd in bash subprocess""" + try: + rawBashOutput = subprocess.run(cmd, check=True, shell=True,\ + stdout=subprocess.PIPE, universal_newlines=True, stderr=subprocess.STDOUT) + bashStdoutt = rawBashOutput.stdout + except subprocess.CalledProcessError as e: + raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output)) + return(bashStdoutt) + +def queryHgPublicSessAndAssignOutputFileAndDir(saveDir): + """Curl hgPublicSession and assign output file name/directory""" + hgPublicSessionOutPut = bash('curl -Lk https://genome.ucsc.edu/cgi-bin/hgPublicSessions') + outputFile = open(saveDir+'thumbNailLinks.html', 'w') + return(hgPublicSessionOutPut, outputFile) + +def parseHgPublicSessPageAndWriteOut(hgPublicSessionOutPut, saveDir, outputFile): + """Parse hgPublicSession curled page, extract thumbnail/url/description and write out to file""" + sessionThumbNailsWritten = 1 + for line in hgPublicSessionOutPut.split('\n'): + if "trash" in line and sessionThumbNailsWritten < 4: + sessionUrl = "https://genome.ucsc.edu/cgi-bin/"+line.split('"')[1].split("/")[2] + trashDirUrl = line.split('"')[3] + downloadThumbNailUrl = "https://genome.ucsc.edu/trash/hgPS/"+trashDirUrl.split("/")[3] + currentImageFileName = 'sessionThumbNail'+str(sessionThumbNailsWritten)+'.png' + img_data = requests.get(downloadThumbNailUrl).content + with open(currentImageFileName, 'wb') as handler: + handler.write(img_data) + bash('mv '+currentImageFileName+' '+saveDir+currentImageFileName) + bash('chmod 777 '+saveDir+currentImageFileName) + if "Description:" in line and sessionThumbNailsWritten < 4: + sessionThumbNailsWritten+=1 + sessionDescription = line.split('</b> ')[1].split('<br>')[0] + outputFile.write('''<a href="'''+sessionUrl+'''">\n<img src="/'''+currentImageFileName+'''" title="''' + +sessionDescription+'''" class="sessionThumbnail" style="vertical-align: top;" width="30%" + height=40%"></img></a>\n''') + outputFile.close() + bash('chmod 777 '+saveDir+'thumbNailLinks.html') + +def main(): + options = parseArgs() + saveDir = options.saveDir + hgPublicSessionOutPut, outputFile = queryHgPublicSessAndAssignOutputFileAndDir(saveDir) + parseHgPublicSessPageAndWriteOut(hgPublicSessionOutPut, saveDir, outputFile) + +main()