Ejemplo n.º 1
0
	def check_calib(self, frame_type="ALL"):
		warnings = []
		if frame_type=="BIAS":
			if "data" not in self.cal_data["BIAS"]:
				warnings.append("Warning: No bias image found - can't do bias subtraction. Continue anyway?")
		elif frame_type=="DARK":
			if len(self.cal_data["DARK"])==0:
				warnings.append("Warning: No dark images found - can't account for dark current. Continue anyway?")
			else:
				for tag in self.cal_data["DARK"]:
					if not self.cal_data["DARK"][tag]["master"]:
						warnings.append("Warning: No bias frame applied to dark frame with exposure {}. Continue anyway?".format(tag))
		elif frame_type=="Flat Field":
			if len(self.cal_data["Flat Field"])==0:
				warnings.append("Warning: No flat images found - can't account for detector sensitivity. Continue anyway?")
			else:
				for tag in self.cal_data["Flat Field"]:
					if not self.cal_data["Flat Field"][tag]["master"]:
						warnings.append("Warning: No bias frame applied to flat frame with filter \"{}\". Continue anyway?".format(tag))
		elif frame_type=="ALL":
			warnings.extend(self.check_calib("BIAS"))
			warnings.extend(self.check_calib("DARK"))
			warnings.extend(self.check_calib("Flat Field"))
		else:
			warnings.append("Warning: Unknown frame type. Continue anyway?")
		return warnings
Ejemplo n.º 2
0
    def wsdl_validate_params(self, struct, value):
        """Validate the arguments (actual values) for the parameters structure.
           Fail for any invalid arguments or type mismatches."""
        errors = []
        warnings = []
        valid = True

        # Determine parameter type
        if type(struct) == type(value):
            typematch = True
        if not isinstance(struct, dict) and isinstance(value, dict):
            typematch = True    # struct can be a dict or derived (Struct)
        else:
            typematch = False

        if struct == str:
            struct = unicode        # fix for py2 vs py3 string handling

        if not isinstance(struct, (list, dict, tuple)) and struct in TYPE_MAP.keys():
            if not type(value) == struct:
                try:
                    struct(value)       # attempt to cast input to parameter type
                except:
                    valid = False
                    errors.append('Type mismatch for argument value. parameter(%s): %s, value(%s): %s' % (type(struct), struct, type(value), value))

        elif isinstance(struct, list) and len(struct) == 1 and not isinstance(value, list):
            # parameter can have a dict in a list: [{}] indicating a list is allowed, but not needed if only one argument.
            next_valid, next_errors, next_warnings = self.wsdl_validate_params(struct[0], value)
            if not next_valid:
                valid = False
            errors.extend(next_errors)
            warnings.extend(next_warnings)

        # traverse tree
        elif isinstance(struct, dict):
            if struct and value:
                for key in value:
                    if key not in struct:
                        valid = False
                        errors.append('Argument key %s not in parameter. parameter: %s, args: %s' % (key, struct, value))
                    else:
                        next_valid, next_errors, next_warnings = self.wsdl_validate_params(struct[key], value[key])
                        if not next_valid:
                            valid = False
                        errors.extend(next_errors)
                        warnings.extend(next_warnings)
                for key in struct:
                    if key not in value:
                        warnings.append('Parameter key %s not in args. parameter: %s, value: %s' % (key, struct, value))
            elif struct and not value:
                warnings.append('parameter keys not in args. parameter: %s, args: %s' % (struct, value))
            elif not struct and value:
                valid = False
                errors.append('Args keys not in parameter. parameter: %s, args: %s' % (struct, value))
            else:
                pass
        elif isinstance(struct, list):
            struct_list_value = struct[0]
            for item in value:
                next_valid, next_errors, next_warnings = self.wsdl_validate_params(struct_list_value, item)
                if not next_valid:
                    valid = False
                errors.extend(next_errors)
                warnings.extend(next_warnings)
        elif not typematch:
            valid = False
            errors.append('Type mismatch. parameter(%s): %s, value(%s): %s' % (type(struct), struct, type(value), value))

        return (valid, errors, warnings)
Ejemplo n.º 3
0
    def wsdl_validate_params(self, struct, value):
        """Validate the arguments (actual values) for the parameters structure.
           Fail for any invalid arguments or type mismatches."""
        errors = []
        warnings = []
        valid = True

        # Determine parameter type
        if type(struct) == type(value):
            typematch = True
        if not isinstance(struct, dict) and isinstance(value, dict):
            typematch = True  # struct can be a dict or derived (Struct)
        else:
            typematch = False

        if struct == str:
            struct = unicode  # fix for py2 vs py3 string handling

        if not isinstance(struct,
                          (list, dict, tuple)) and struct in TYPE_MAP.keys():
            if not type(value) == struct and value is not None:
                try:
                    struct(value)  # attempt to cast input to parameter type
                except:
                    valid = False
                    errors.append(
                        'Type mismatch for argument value. parameter(%s): %s, value(%s): %s'
                        % (type(struct), struct, type(value), value))

        elif isinstance(struct, list) and len(struct) == 1 and not isinstance(
                value, list):
            # parameter can have a dict in a list: [{}] indicating a list is allowed, but not needed if only one argument.
            next_valid, next_errors, next_warnings = self.wsdl_validate_params(
                struct[0], value)
            if not next_valid:
                valid = False
            errors.extend(next_errors)
            warnings.extend(next_warnings)

        # traverse tree
        elif isinstance(struct, dict):
            if struct and value:
                for key in value:
                    if key not in struct:
                        valid = False
                        errors.append(
                            'Argument key %s not in parameter. parameter: %s, args: %s'
                            % (key, struct, value))
                    else:
                        next_valid, next_errors, next_warnings = self.wsdl_validate_params(
                            struct[key], value[key])
                        if not next_valid:
                            valid = False
                        errors.extend(next_errors)
                        warnings.extend(next_warnings)
                for key in struct:
                    if key not in value:
                        warnings.append(
                            'Parameter key %s not in args. parameter: %s, value: %s'
                            % (key, struct, value))
            elif struct and not value:
                warnings.append(
                    'parameter keys not in args. parameter: %s, args: %s' %
                    (struct, value))
            elif not struct and value:
                valid = False
                errors.append(
                    'Args keys not in parameter. parameter: %s, args: %s' %
                    (struct, value))
            else:
                pass
        elif isinstance(struct, list):
            struct_list_value = struct[0]
            for item in value:
                next_valid, next_errors, next_warnings = self.wsdl_validate_params(
                    struct_list_value, item)
                if not next_valid:
                    valid = False
                errors.extend(next_errors)
                warnings.extend(next_warnings)
        elif not typematch:
            valid = False
            errors.append('Type mismatch. parameter(%s): %s, value(%s): %s' %
                          (type(struct), struct, type(value), value))

        return (valid, errors, warnings)
Ejemplo n.º 4
0
 def warnings(self):
     #TODO add test
     warnings = []
     for meta in self:
         warnings.extend(meta.warnings)
     return warnings