Skip to main content

No project description provided

Project description

PyWry Web Viewer

PyWryLogo

Easily create HTML webviewers in python utilizing the wry library. Unlike many HTML viewers that exist for Python - Pywry allows you to run javacsript. PyWry is also a ~2mb footprint for Mac and Windows - Linux will require a few more libraries which are listed below.

Please note: this library is currently in early alpha and is NOT ready for production use.

Installation


PyWry is available on PyPI and can be installed with pip:

pip install pywry

For development, you can install from source with the following steps:

  • Clone the repository: git clone https://github.com/OpenBB-finance/pywry.git
  • Install rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Create a virtual environment: python -m venv venv
  • Acitvate the environment: source venv/bin/activate (Unix) or venv\Scripts\activate (Windows)
  • Install dependencies: pip install .[dev]
  • Build the pip package: maturin build
  • Install the package: pip install [file path from above] --force-reinstall

Usage

import asyncio
import sys

from pywry import PyWry


async def main_loop():
    while True:
        await asyncio.sleep(1)


if __name__ == "__main__":
    try:
        handler = PyWry()
        handler.send_html("<h1 style='color: red;'>Welcome to PyWry!</h1>")
        handler.start()

        # PyWry creates a new thread for the backend,
        # so we need to run the main loop in the main thread.
        # otherwise, the program will exit immediately.
        handler.loop.run_until_complete(main_loop())
    except KeyboardInterrupt:
        print("Keyboard interrupt detected. Exiting...")
        sys.exit(0)

JSON Keys

PyWry uses a JSON object to communicate between the python and rust backends and the javascript frontend. The following keys are available:

Key Type Description
html Path | str The path to the HTML file to be loaded, or HTML string.
title str The title of the window.
icon str | Path The path to png icon to be used for the window.
json_data str | dict A JSON string or dictionary to be passed to the javascript frontend. (see below)
height int The height of the window.
width int The width of the window.
download_path str | Path The path to the download directory.

Javascript

PyWry allows you to run javascript in the frontend. To do this, you can pass a dictionary of data to the json_data key in the send_html method. This dictionary will be converted to a JSON string and passed to the frontend. You can then access this data in the frontend by using the window.json_data object. For example:


Python

from pathlib import Path
# code from above ...

# change send_html line to:
        handler.send_html(
            html=Path(__file__).parent / "index.html", json_data={"name": "PyWry"}
        )

HTML

<html>
    <head>
        <script>
            window.onload = () => {
                // if you passed a JSON string, you will need to parse it first
                if (typeof window.json_data === "string") {
                    window.json_data = JSON.parse(window.json_data);
                }
                document.getElementById("name").innerHTML = window.json_data.name;
            };
        </script>
    </head>
    <body>
        <h1 style='color: red;'>Hello, <span id="name"></span>!</h1>
    </body>
</html>

Platform-specific notes

All platforms use TAO to build the window, and wry re-exports it as an application module. Here is the underlying web engine each platform uses, and some dependencies you might need to install.

Linux

Tao uses gtk-rs and its related libraries for window creation and wry also needs WebKitGTK for WebView. So please make sure the following packages are installed:

Arch Linux / Manjaro

sudo pacman -S webkit2gtk

Debian / Ubuntu

sudo apt install libwebkit2gtk-4.0-dev

Fedora / CentOS / AlmaLinux

sudo dnf install gtk3-devel webkit2gtk3-devel

macOS

WebKit is native to macOS, so no additional dependencies are needed.

Windows

WebView2 provided by Microsoft Edge Chromium is used. So wry supports Windows 7, 8, 10 and 11.


Troubleshooting Linux

"/lib/x86_64-linux-gnu/libgio-2.0.so.0: undefined symbol: g_module_open_full"

This is a known issue with the gio library. You can fix it by installing the libglib2.0-dev package.

PyWry is a project that aims to provide Python bindings for WRY, a cross-platform webview library. WRY is a trademark of the Tauri Program within the Commons Conservancy and PyWry is not officially endorsed or supported by them. PyWry is an independent and community-driven effort that respects the original goals and values of Tauri and WRY. PyWry does not claim any ownership or affiliation with WRY or the Tauri Program.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywry-0.6.2.tar.gz (39.0 kB view details)

Uploaded Source

Built Distributions

pywry-0.6.2-py3-none-win_amd64.whl (868.4 kB view details)

Uploaded Python 3 Windows x86-64

pywry-0.6.2-py3-none-manylinux_2_28_x86_64.whl (66.8 MB view details)

Uploaded Python 3 manylinux: glibc 2.28+ x86-64

pywry-0.6.2-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (2.3 MB view details)

Uploaded Python 3 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

File details

Details for the file pywry-0.6.2.tar.gz.

File metadata

  • Download URL: pywry-0.6.2.tar.gz
  • Upload date:
  • Size: 39.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.3.0

File hashes

Hashes for pywry-0.6.2.tar.gz
Algorithm Hash digest
SHA256 9bd88c36ab0860728d9e64360010f8abcede43645656030e4a63e69e81a98c95
MD5 4ce42f4695e4691432052fd0999d7afc
BLAKE2b-256 60df2bd468f465011fb021f45cbe5cc9f1cfe15872c61e1cab2a7962bd4f4860

See more details on using hashes here.

File details

Details for the file pywry-0.6.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: pywry-0.6.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 868.4 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.3.0

File hashes

Hashes for pywry-0.6.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 4f0e5b502555ee8b8e799baeaebe63243a84b7ce51df01a1c439dbc4e8227b9e
MD5 3251464c3f230db8f19d723fc0466f78
BLAKE2b-256 1909d33a4fedf333af8cb208bb9b9a974fbd025c654c6b231b77e22766591ed1

See more details on using hashes here.

File details

Details for the file pywry-0.6.2-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pywry-0.6.2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1d9ffd826a3a08c132843340e6d896efb7b972b301d045e3239a7dc08d9cac2f
MD5 e95004e6fe60ba8af9886b948cd562eb
BLAKE2b-256 02cc00c1c93ff5df28cb95a1838f2405f7943e1c0c1a965a6a14670ca3ea9745

See more details on using hashes here.

File details

Details for the file pywry-0.6.2-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pywry-0.6.2-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 45d6bb827bf76b2532a9d70b539209d70f37dfb13e9862549b7bff8500ad2495
MD5 c9892b071d8dfc9b46adc6a25a273f8f
BLAKE2b-256 fa0e0a4b6436433678d49790683ea869e40cca6ecc36f6abdaf01a489298a8f8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page