def _error_template(cls, status_code, errors, source=None):
        """Construct JSON error response

        :param status_code: the http status code
        :param errors: string or list of error strings
        :param source: source of the error
        :returns: dictionary, e.g.
            {
                'status': 400,
                'errors': [
                    {
                        'source': 'accounts' ,
                        'message':'errormsg1'
                    },
                    {
                        'source': 'accounts',
                        'message':'errormsg2'
                    }
                ]
            }
        """
        # this handles unhandled exceptions
        if isinstance(errors, basestring):
            errors_out = {'errors': [{'message': errors}]}
        elif isinstance(errors, (list, tuple)):
            errors_out = {'errors': [{'message': e} for e in errors]}
        else:
            errors_out = errors
        errors_out['status'] = status_code

        for error in errors_out['errors']:
            if not error.get('source'):
                error['source'] = source

        logging.error(json.dumps(errors_out))
        return errors_out
Construct JSON error response

        :param status_code: the http status code
        :param errors: string or list of error strings
        :param source: source of the error
        :returns: dictionary, e.g.
            {
                'status': 400,
                'errors': [
                    {
                        'source': 'accounts' ,
                        'message':'errormsg1'
                    },
                    {
                        'source': 'accounts',
                        'message':'errormsg2'
                    }
                ]
            }