No project description provided
Project description
PyWry Web Viewer
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) orvenv\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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bd88c36ab0860728d9e64360010f8abcede43645656030e4a63e69e81a98c95 |
|
MD5 | 4ce42f4695e4691432052fd0999d7afc |
|
BLAKE2b-256 | 60df2bd468f465011fb021f45cbe5cc9f1cfe15872c61e1cab2a7962bd4f4860 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f0e5b502555ee8b8e799baeaebe63243a84b7ce51df01a1c439dbc4e8227b9e |
|
MD5 | 3251464c3f230db8f19d723fc0466f78 |
|
BLAKE2b-256 | 1909d33a4fedf333af8cb208bb9b9a974fbd025c654c6b231b77e22766591ed1 |
File details
Details for the file pywry-0.6.2-py3-none-manylinux_2_28_x86_64.whl
.
File metadata
- Download URL: pywry-0.6.2-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 66.8 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.3.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d9ffd826a3a08c132843340e6d896efb7b972b301d045e3239a7dc08d9cac2f |
|
MD5 | e95004e6fe60ba8af9886b948cd562eb |
|
BLAKE2b-256 | 02cc00c1c93ff5df28cb95a1838f2405f7943e1c0c1a965a6a14670ca3ea9745 |
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
- Download URL: pywry-0.6.2-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
- Upload date:
- Size: 2.3 MB
- Tags: Python 3, macOS 10.9+ universal2 (ARM64, x86-64), macOS 10.9+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.3.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45d6bb827bf76b2532a9d70b539209d70f37dfb13e9862549b7bff8500ad2495 |
|
MD5 | c9892b071d8dfc9b46adc6a25a273f8f |
|
BLAKE2b-256 | fa0e0a4b6436433678d49790683ea869e40cca6ecc36f6abdaf01a489298a8f8 |