def pentaho_validate_params(self, cr, uid, report, param_vals, context=None): """Validate a list of passed parameters against the defined params for a Pentaho report. Raises an exception if any of the params are invalid. @param report: Browse object on the ir.actions.report.xml record for the report. @param param_vals: Dict with parameter values to pass to the report. These are python data types prior to conversion for passing to the Pentaho server. """ param_defs = core.fetch_report_parameters(cr, uid, report.report_name, context=context) val_names = param_vals.keys() for pdef in param_defs: pname = pdef.get('name', '') if not pname: continue if pname in val_names: val_names.remove(pname) else: if pdef.get('default_value', False): if type(pdef['default_value']) in (list, tuple): param_vals[pname] = pdef['default_value'][0] else: param_vals[pname] = pdef['default_value'] else: if pdef.get('is_mandatory', False): raise except_orm(_('Error'), _("Report '%s'. No value passed for mandatory report parameter '%s'.") % (report.report_name, pname)) continue # Make sure data types match value_type = pdef.get('value_type', '') java_list, value_type = check_java_list(value_type) if not value_type in JAVA_MAPPING: raise except_orm(_('Error'), _("Report '%s', parameter '%s'. Type '%s' not supported.") % (report.report_name, pname, pdef.get('value_type', ''))) local_type = JAVA_MAPPING[value_type](pdef.get('attributes', {}).get('data-format', False)) param_val = param_vals[pname] if not local_type in PARAM_VALUES: raise except_orm(_('Error'), _("Report '%s', parameter '%s'. Local type '%s' not supported.") % (report.report_name, pname, local_type)) if not isinstance(param_val, PARAM_VALUES[local_type]['py_types']): raise except_orm(_('Error'), _("Report '%s', parameter '%s'. Passed value is '%s' but must be one of '%s'.") % (report.report_name, pname, param_val.__class__.__name__, PARAM_VALUES[local_type]['py_types'])) converter = PARAM_VALUES[local_type].get('convert') if converter: try: converter(param_val) except Exception, e: raise except_orm(_('Error'), _("Report '%s', parameter '%s'. Passed value '%s' failed data conversion to type '%s'.\n%s") % (report.report_name, pname, param_val, local_type, str(e)))
def pentaho_validate_params(self, cr, uid, report, param_vals, context=None): """Validate a list of passed parameters against the defined params for a Pentaho report. Raises an exception if any of the params are invalid. @param report: Browse object on the ir.actions.report.xml record for the report. @param param_vals: Dict with parameter values to pass to the report. These are python data types prior to conversion for passing to the Pentaho server. """ param_defs = core.fetch_report_parameters(cr, uid, report.report_name, context=context) val_names = param_vals.keys() for pdef in param_defs: pname = pdef.get('name', '') if not pname: continue if pname in val_names: val_names.remove(pname) else: if pdef.get('default_value', False): if type(pdef['default_value']) in (list, tuple): param_vals[pname] = pdef['default_value'][0] else: param_vals[pname] = pdef['default_value'] else: if pdef.get('is_mandatory', False): raise orm.except_orm(_('Error'), _("Report '%s'. No value passed for mandatory report parameter '%s'.") % (report.report_name, pname)) continue # Make sure data types match value_type = pdef.get('value_type', '') java_list, value_type = check_java_list(value_type) if not value_type in JAVA_MAPPING: raise orm.except_orm(_('Error'), _("Report '%s', parameter '%s'. Type '%s' not supported.") % (report.report_name, pname, pdef.get('value_type', ''))) local_type = JAVA_MAPPING[value_type](pdef.get('attributes', {}).get('data-format', False)) param_val = param_vals[pname] if not local_type in PARAM_VALUES: raise orm.except_orm(_('Error'), _("Report '%s', parameter '%s'. Local type '%s' not supported.") % (report.report_name, pname, local_type)) if not isinstance(param_val, PARAM_VALUES[local_type]['py_types']): raise orm.except_orm(_('Error'), _("Report '%s', parameter '%s'. Passed value is '%s' but must be one of '%s'.") % (report.report_name, pname, param_val.__class__.__name__, PARAM_VALUES[local_type]['py_types'])) converter = PARAM_VALUES[local_type].get('convert') if converter: try: converter(param_val) except Exception, e: raise orm.except_orm(_('Error'), _("Report '%s', parameter '%s'. Passed value '%s' failed data conversion to type '%s'.\n%s") % (report.report_name, pname, param_val, local_type, str(e)))