class EWAssayParam: ''' An EWAssayParam is a container for a parameter. A parameter can be any type of data. ''' def __init__(self, name, value=None, default=None, description=None, summary=None, question=None): ''' Parameters have values, and optional default values and descriptions ''' self.name = str(name) self.data = value self.default = None self.summary = summary self.description = description self.question = question def value(): def fget(self): print "Fgetting in the superclass" return self.data def fset(self, value): print "Fsetting in the superclass" self.data = value return locals() value = property(**value()) def validate(self): return True def __repr__(self): return "" % repr(self.data) def __str__(self): return repr(self) class EWAssayIntParam(EWAssayParam): ''' Integer parameter ''' def __init__(self, name, value, default=None, description=None, summary=None, question=None): EWAssayParam.__init__(self, name, value=int(value), default=default, description=description, summary=summary, question=question) self.min = None self.max = None def __value(): def fget(self): print "Fgetting data" return self.data def fset(self, value): print "Fsetting data" self.data = int(value) return locals() value = property(**__value()) def validate(self): if self.min != None and self.value < min: return False if self.max != None and self.value > max: return False return True class EWAssayFloatParam(EWAssayParam): ''' Floating-point parameter ''' def __init__(self, value, default=None, description=None, summary=None, question=None): EWAssayParam.__init__(self, value=float(value), default=default, description=description, summary=summary, question=question) self.min = None self.max = None def validate(self): if self.min != None and self.value < min: return False if self.max != None and self.value > max: return False return True class EWAssayStringParam(EWAssayParam): ''' String parameter ''' def __init__(self, value, default=None, description=None, summary=None, question=None): EWAssayParam.__init__(self, value=str(value), default=default, description=description, summary=summary, question=question) class EWAssayFileParam(EWAssayParam): ''' File parameter ''' def __init__(self, value, default=None, description=None, summary=None, question=None): EWAssayParam.__init__(self, value=str(value), default=default, description=description, summary=summary, question=question) class EWAssayChoiceParam(EWAssayParam): ''' Choose from a list ''' def __init__(self, value, choices, default=None, description=None, summary=None, question=None): EWAssayParam.__init__(self, value=int(value), default=default, description=description, summary=summary, question=question) self.choices = [] for choice in choices: self.choices.append(str(choice)) def validate(self): return self.value in range(len(self.choices)) class EWAssayBoolParam(EWAssayParam): ''' Boolean (T/F) parameter ''' def __init__(self, value, default=None, description=None, summary=None, question=None): EWAssayParam.__init__(self, value=bool(value), default=default, description=description, summary=summary, question=question) self.trueMessage = str(True) self.falseMessage = str(False) class EWAssayParamGroup: ''' Represents a group of parameters. Use like this: group1 = EWAssayParamGroup() group1["Sample Rate"] = EWAssayIntParam(40) group1["Integration Time"] = EWAssayFloatParam(0.4) ...etc... ''' def __init__(self, name, description=None, summary=None): self.name = str(name) self.description = description self.summary = summary self.params = [] self.__params_dict = {} def __setitem__(self, x, y): self.__params_dict[str(x)] = y def __getitem__(self, x): return self.__params_dict[x] def __repr__(self): return "" % (self.name, len(self.params)) def __str__(self): return repr(self)