from __future__ import division # confidence high import sys, traceback from pyraf import iraf iraf.setVerbose() def printcenter(s, length=70, char="-"): l1 = (length-len(s))//2 l2 = length-l1-len(s) print l1*char, s, l2*char ptried = {} npass = 0 ntotal = 0 plist = iraf.getPkgList() keepGoing = 1 while keepGoing and (ntotal<len(plist)): plist.sort() nnew = 0 npass = npass + 1 printcenter("pass "+`npass` + " trying " + `len(plist)`, char="=") for pkg in plist: if not ptried.has_key(pkg): ptried[pkg] = 1 nnew = nnew+1 l1 = (70-len(pkg))//2 l2 = 70-l1-len(pkg) printcenter(pkg) if pkg == "digiphotx":
def compileall(): """Compile all CL procedures & packages""" # start the timer t0 = time.time() # now do the IRAF startup from pyraf import iraf, cl2py from pyraf.iraftask import IrafCLTask, IrafPkg iraf.setVerbose() pkgs_tried = {} tasks_tried = {} npkg_total = 0 ntask_total = 0 ntask_failed = 0 # main loop -- keep loading packages as long as there are # new ones to try, and after loading each package look for # and initialize any CL tasks npass = 0 pkg_list = iraf.getPkgList() keepGoing = 1 while keepGoing and (npkg_total<len(pkg_list)): npass = npass + 1 pkg_list.sort() npkg_new = 0 printcenter("pass %d: %d packages (%d new)" % (npass,len(pkg_list),len(pkg_list)-npkg_total), char="=") for pkg in pkg_list: if not pkgs_tried.has_key(pkg): pkgs_tried[pkg] = 1 npkg_new = npkg_new+1 printcenter(pkg) if pkg in ["newimred","digiphotx"]: print """ Working around bugs in newimred, digiphotx. They screw up subsequent loading of imred/digiphot tasks. (It happens in IRAF too.)""" sys.stdout.flush() else: try: # redirect stdin in case the package tries to # prompt for parameters (this aborts but keeps # going) iraf.load(pkg,kw={'Stdin': 'dev$null'}) except KeyboardInterrupt: print 'Interrupt' sys.stdout.flush() keepGoing = 0 break except Exception, e: sys.stdout.flush() traceback.print_exc() if isinstance(e,MemoryError): keepGoing = 0 break print "...continuing...\n" sys.stdout.flush() # load tasks after each package task_list = iraf.getTaskList() task_list.sort() for taskname in task_list: if not tasks_tried.has_key(taskname): tasks_tried[taskname] = 1 taskobj = iraf.getTask(taskname) if isinstance(taskobj, IrafCLTask) and \ not isinstance(taskobj,IrafPkg): ntask_total = ntask_total+1 print "%d: %s" % (ntask_total, taskname) sys.stdout.flush() try: taskobj.initTask() except KeyboardInterrupt: print 'Interrupt' sys.stdout.flush() keepGoing = 0 break except Exception, e: sys.stdout.flush() traceback.print_exc(10) if isinstance(e,MemoryError): keepGoing = 0 break print "...continuing...\n" sys.stdout.flush() ntask_failed = ntask_failed+1 if not keepGoing: break
sys.stdout.flush() traceback.print_exc(10) if isinstance(e, MemoryError): keepGoing = 0 break print "...continuing...\n" sys.stdout.flush() ntask_failed = ntask_failed + 1 if not keepGoing: break npkg_total = npkg_total + npkg_new if not keepGoing: break printcenter( "Finished pass %d new pkgs %d total pkgs %d total tasks %d" % (npass, npkg_new, npkg_total, ntask_total), char="=") pkg_list = iraf.getPkgList() t1 = time.time() print "Finished package and task loading (%f seconds)" % (t1 - t0, ) print "Compiled %d CL tasks -- %d failed" % (ntask_total, ntask_failed) sys.stdout.flush() def usage(): print """Usage: %s [-r] [-h] -r recompiles only out-of-date routines. Default is to force recompilation of all CL scripts and packages. -h prints this message. """ sys.stdout.flush() sys.exit()
break except Exception, e: sys.stdout.flush() traceback.print_exc(10) if isinstance(e,MemoryError): keepGoing = 0 break print "...continuing...\n" sys.stdout.flush() ntask_failed = ntask_failed+1 if not keepGoing: break npkg_total = npkg_total + npkg_new if not keepGoing: break printcenter("Finished pass %d new pkgs %d total pkgs %d total tasks %d" % (npass, npkg_new, npkg_total, ntask_total), char="=") pkg_list = iraf.getPkgList() t1 = time.time() print "Finished package and task loading (%f seconds)" % (t1-t0,) print "Compiled %d CL tasks -- %d failed" % (ntask_total, ntask_failed) sys.stdout.flush() def usage(): print """Usage: %s [-r] [-h] -r recompiles only out-of-date routines. Default is to force recompilation of all CL scripts and packages. -h prints this message. """ sys.stdout.flush() sys.exit()