def METHOD_NAME(self, request, *args, **kwargs):
    logger.debug(f"{request.headers}: {request.POST}")
    try:
        self.validate_json_schema(
            request.POST.dict(),
            request.POST["grant_type"],
            "Token request object validation failed "
        )
    except ValidationException:
        return JsonResponse(
            {
                "error": "invalid_request",
                "error_description": "Token request object validation failed",
            },
            status = 400
        )
    self.commons = self.get_jwt_common_data()
    self.issuer = self.get_issuer()
    # check client_assertion and client ownership
    try:
        self.check_client_assertion(
            request.POST['client_id'],
            request.POST['client_assertion']
        )
    except Exception as e: # pragma: no cover
        logger.warning(
            "Client authentication failed for "
            f"{request.POST.get('client_id', 'unknown')}: {e}"
        )
        return JsonResponse(
            # TODO: error message here
            {
                'error': "unauthorized_client",
                'error_description': ""
            }, status = 403
        )
    if request.POST.get("grant_type") == 'authorization_code':
        self.authz = OidcSession.objects.filter(
            auth_code=request.POST["code"],
            revoked=False
        ).first()
        if not self.authz:
            return HttpResponseBadRequest()
        return self.grant_auth_code(request)
    elif request.POST.get("grant_type") == 'refresh_token':
        return self.grant_refresh_token(request)
    else:
        # Token exchange? :-)
        raise NotImplementedError()