示例#1
0
文件: ui.py 项目: hotkee/odoo-pentaho
    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)))
示例#2
0
    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)))