# # Standard imports # import sys import os import string import inspect from odict import odict # import parameter checking function from parameter_check import * # # Function definition and documentation def template(param1=None,param2=None): """A template task that mimics listobs: Lists following properties of a measurement set: scan list, field list, spectral window list with correlators, antenna locations, ms table information. Keyword arguments: param1 -- one line description of param1 default: param1 default. example: param1='some_value' param2 -- Second parameter (list options if possible) param2 = True: (default) param2 = False: less information Additional comments go here: """ # # boilerplate - handles the global namespace acquisition # myf is the means of accessing the globals within the function # a=inspect.stack() stacklevel=0 for k in range(len(a)): if (string.find(a[k][1], 'ipython console') > 0): stacklevel=k myf=sys._getframe(stacklevel).f_globals # # vvvvvvvv myf['taskname']='template' # ^^^^^^^^ ###fill unfilled parameters with defaults myf['update_params'](func=myf['taskname'], printtext=False) #### access any tools that are needed; in this case, ms. ms=myf['ms'] ### #Handle globals or user over-ride of arguments # vvvvvvvv vvvvvvvv function_signature_defaults=dict(zip(template.func_code.co_varnames,template.func_defaults)) # ^^^^^^^^ ^^^^^^^^ for item in function_signature_defaults.iteritems(): key,val = item keyVal = eval(key) if (keyVal == None): #user hasn't set it - use global/default pass else: #user has set it - use over-ride myf[key]=keyVal # Set all task parameters to their global value # vvvvvvvvvvvvvvvvvvvvvv param1=myf['param1'] param2=myf['param2'] casalog=myf['casalog'] # include the logger # ^^^^^^^^^^^^^^^^^^^^^^ #sys._getframe(1).f_globals=myf # ### #Add type/menu/range error checking here # vvvvvvvvvvvvvvvvv arg_names=['param1','param2'] arg_values=[param1,param2] arg_types=[str,bool] # ^^^^^^^^^^^^^^^^^ #parameter_printvalues(arg_names,arg_values,arg_types) try: parameter_checktype(arg_names,arg_values,arg_types) except TypeError, e: print "template -- TypeError: ", e return ### casalog.origin('template') casalog.post('') casalog.post('###############################################') # vvvvvvvv casalog.post('### Begin Task: template ###') # ^^^^^^^^ #parameter_printvalues(arg_names,arg_values,arg_types) # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv #Python script try: if ((type(param1)==str) & (os.path.exists(param1))): ms.open(thems=param1) else: raise Exception, 'Visibility data set not found - please verify the name' ms.summary(verbose=param2) ms.close() # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ except Exception, instance: print '*** Error ***',instance # vvvvvvvv casalog.post('### End Task: template ###') # ^^^^^^^^ casalog.post('###############################################') casalog.post('') saveinputs=myf['saveinputs'] # vvvvvvvv vvvvvvvv saveinputs('template','template.last') # ^^^^^^^^ ^^^^^^^^ def template_defaults(param=None): a=inspect.stack() stacklevel=0 for k in range(len(a)): if (string.find(a[k][1], 'ipython console') > 0): stacklevel=k myf=sys._getframe(stacklevel).f_globals a=odict() # vvvvvvvvvvvvvvvvvv a['param1']='' a['param2']=True # ^^^^^^^^^^^^^^^^^^ if(param == None): myf['__set_default_parameters'](a) elif(param == 'paramkeys'): return a.keys() else: if(a.has_key(param)): return a[param] def template_description(key='template',subkey=None): # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv desc={'template': 'List data set summary in the logger:\n', 'param1': 'First parameter', 'param2': 'Second parameter (list options if possible)', # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } if(desc.has_key(key)): return desc[key] return '' def template_check_params(param=None, value=None): # v if(param=='param1'): if (((type(value)==str) & (os.path.exists(value)))): return True else: return False elif(param=='param2'): if (type(value)==bool): return True else: return False # ^ else: return True