def report(
    server_url: str,
    status: str,
    deployment_id: str,
    server_certificate: str,
    JWT: str,
    deployment_logger: Optional[menderlog.DeploymentLogHandler] = None,
) -> bool:
    """Report update :param status to the Mender server"""
    if not status:
        log.error("No status given to report")
        return False
    try:
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + JWT
        }
        response = http_request(
            requests.put,
            server_url + "/api/devices/v1/deployments/device/deployments/" +
            deployment_id + "/status",
            headers=headers,
            verify=server_certificate or True,
            json={"status": status},
        )
        if response.status_code != 204:
            log.error(f"Failed to upload the deployment status '{status}',\
                error: {response.status_code}: {response.reason}")
            return False
        if status == STATUS_FAILURE:
            menderlog.add_sub_updater_log(
                os.path.join(settings.PATHS.data_store, "sub-updater.log"))
            if deployment_logger:
                logdata = deployment_logger.marshal()
            else:
                log.error("No deployment log handler given")
                return True

            response = http_request(
                requests.put,
                server_url +
                "/api/devices/v1/deployments/device/deployments/" +
                deployment_id + "/log",
                headers=headers,
                verify=server_certificate or True,
                json={
                    "messages": logdata,
                },
            )
            if response.status_code != 204:
                log.error(f"Failed to upload the deployment log,\
                    error: {response.status_code}: {response.reason} {response.text}"
                          )
                return False
    except MenderRequestsException as e:
        log.error(e)
        return False
    return True
def report(server_url: str, status: str, deployment_id: str,
           server_certificate: str, JWT: str) -> bool:
    """Report update :param status to the Mender server"""
    if not status:
        log.error("No status given to report")
        return False
    try:
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + JWT
        }
        response = requests.put(
            server_url + "/api/devices/v1/deployments/device/deployments/" +
            deployment_id + "/status",
            headers=headers,
            verify=server_certificate if server_certificate else True,
            json={"status": status},
        )
        if response.status_code != 204:
            log.error(f"Failed to upload the deployment status '{status}',\
                error: {response.status_code}: {response.reason}")
            return False
        if status == STATUS_FAILURE:
            menderlog.add_sub_updater_log(
                os.path.join(settings.PATHS.deployment_log, "deployment.log"))
            response = requests.put(
                server_url +
                "/api/devices/v1/deployments/device/deployments/" +
                deployment_id + "/log",
                headers=headers,
                verify=server_certificate if server_certificate else True,
                json={
                    "messages": [
                        # Dummy data
                        {
                            "timestamp": "2016-03-11T13:03:17.063493443Z",
                            "level": "INFO",
                            "message": "OK",
                        }
                    ]
                },
            )
            if response.status_code != 204:
                log.error(f"Failed to upload the deployment log,\
                    error: {response.status_code}: {response.reason} {response.text}"
                          )
                return False
    except (
            requests.RequestException,
            requests.ConnectionError,
            requests.URLRequired,
            requests.TooManyRedirects,
            requests.Timeout,
    ) as e:
        log.error(e)
        return False
    return True