Targeted, backend-initiated actions can be triggered from event handlers, using methods of state. Internally, this is achieved using Framework’s mail, ephemeral state that is cleared when it reaches the intended user.

Triggering a file download

The file_download method takes the data and file_name arguments. The first must contain raw bytes (a bytes object) or a packed file. As mentioned in the Application State section of the guide, a packed file is obtained using the wf.pack_file or wf.pack_bytes methods.

def handle_file_download(state):
    # Pack the file as a FileWrapper object
    data = wf.pack_file("assets/story.txt", "text/plain")
    file_name = "thestory.txt"
    state.file_download(data, file_name)

Adding a notification

Framework adds notifications when a runtime error takes place. You can add your own notifications using the add_notification method, which takes the type, title and message arguments. type must be one of error, warning, info, success.

def notify_of_things_that_happened(state):
    state.add_notification("error", "An Error", "Something bad happened.")
    state.add_notification("warning", "A Warning", "Be aware that something happened.")
    state.add_notification("info", "Some Info", "Something happened.")
    state.add_notification("success", "A Success", "Something good happened.")

Opening a URL

Open a URL in a new tab using the open_url method, which takes the url argument.

def handle_open_website(state):
    state.open_url("https://writer.com")

The URL will be safely opened with noopener and noreferrer options.

Popup blockers: Given that the URL is opened asynchronously, popup blockers will likely block the new window —unless the user has opted in.

Changing the active page

The active page and route parameters can be changed using the methods set_page and set_route_vars. This is explained in more detail in Page Routes.