def updateCLscript(filename): cache = linecache.cache if filename in cache: del cache[filename] try: import iraf taskname = filename[11:-1] taskobj = iraf.getTask(taskname) fullname = taskobj.getFullpath() stat = os.stat(fullname) size = stat[ST_SIZE] mtime = stat[ST_MTIME] lines = taskobj.getCode().split('\n') cache[filename] = size, mtime, lines, taskname return lines except (IrafError, KeyError, AttributeError): return []
def compileall(): """Compile all CL procedures & packages""" # start the timer t0 = time.time() # now do the IRAF startup from pyraf import iraf, cl2py, clcache, irafglobals from pyraf.iraftask import IrafCLTask, IrafPkg # close the old code cache and reopen without system cache cl2py.codeCache.close() del clcache.codeCache userCacheDir = os.path.join(irafglobals.userIrafHome, 'pyraf') if not os.path.exists(userCacheDir): try: os.mkdir(userCacheDir) print 'Created directory %s for cache' % userCacheDir except OSError: print 'Could not create directory %s' % userCacheDir dbfile = 'clcache' clcache.codeCache = clcache._CodeCache( [os.path.join(userCacheDir, dbfile)]) cl2py.codeCache = clcache.codeCache 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
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
def test_exec_pset(task, pars): t = iraf.getTask(task) pdict = t.getParDict() for name, value in pars.items(): assert pdict[name].value == value
def test_exec_foreign_task(task): t = iraf.getTask(task) t(Stdout="/dev/null")
def test_load_cl_task(task): t = iraf.getTask(task) t.initTask()