human
Complete this python program:
def delete_serving_url_async(blob_key, rpc=None):
assistant
#Here is the Python code you requested.

    """Delete a serving url created using get_serving_url - async version.
    Args:
    blob_key: BlobKey, BlobInfo, str, or unicode representation of BlobKey of
    blob that has an existing URL to delete.
    rpc: Optional UserRPC object.
    Returns:
    A UserRPC object.
    Raises:
    BlobKeyRequiredError: when no blobkey was specified.
    InvalidBlobKeyError: the blob_key supplied was invalid.
    Error: There was a generic error deleting the serving url.
    """
    if (not blob_key):
        raise BlobKeyRequiredError('A    Blobkey    is    required    for    this    operation.')
    request = images_service_pb.ImagesDeleteUrlBaseRequest()
    response = images_service_pb.ImagesDeleteUrlBaseResponse()
    request.set_blob_key(_extract_blob_key(blob_key))
    def delete_serving_url_hook(rpc):
        'Checks    success,    handles    exceptions    and    returns    the    converted    RPC    result.\n\n                Args:\n                        rpc:    A    UserRPC    object.\n\n                Raises:\n                        See    docstring    for    delete_serving_url_async    for    more    details.\n                '
        try:
            rpc.check_success()
        except apiproxy_errors.ApplicationError as e:
            raise _ToImagesError(e, blob_key)
    return _make_async_call(rpc, 'DeleteUrlBase', request, response, delete_serving_url_hook, None)