A utilities package for PySide6
Project description
winipyside
A utilities package for PySide6
Overview
Winipyside is a production-ready PySide6 utilities package that provides reusable, well-tested components for building Qt desktop applications. It features encrypted file I/O with AES-GCM, a full-featured media player with encrypted video playback support, an embedded web browser with cookie management, toast notifications, and a modular page-based UI framework.
Key Highlights
- ๐ Encrypted File I/O: Transparent AES-GCM encryption for files and media playback
- ๐ฌ Media Player: Full-featured player with encrypted video support, speed control, and fullscreen mode
- ๐ Web Browser: Embedded browser with cookie management and Qt/Python cookie conversion
- ๐ Notifications: Toast notification system with auto-positioning and smart text truncation
- ๐๏ธ UI Framework: Modular page-based architecture with lifecycle hooks and navigation
- โ Type Safe: 100% type annotated with strict mypy checking
- ๐งช Well Tested: Comprehensive test suite with pytest and pytest-qt
- ๐ CI/CD Ready: Production-ready workflows for headless environments
Features
๐ Encrypted File I/O
Transparent encryption/decryption for files and media with AES-GCM:
- Chunked encryption for efficient streaming (64KB chunks)
- Random access support with position mapping
- Zero-copy decryption for media playback
- Authenticated encryption with nonces and tags
๐ฌ Media Player
Full-featured video player with advanced controls:
- Play/pause, speed control (0.2x-5x), volume slider
- Seekable progress bar with throttled updates
- Fullscreen mode with automatic UI hiding
- Native encrypted video playback without temporary files
- Position resumption and smart resource management
๐ Web Browser
Embedded Chromium-based browser:
- Navigation controls (back, forward, address bar)
- Automatic cookie tracking
- QNetworkCookie โ http.cookiejar.Cookie conversion
- Domain-based cookie retrieval
๐๏ธ UI Framework
Modular architecture for building complex applications:
- Lifecycle hooks:
base_setup()โpre_setup()โsetup()โpost_setup() - Page-based navigation with QStackedWidget
- Dynamic subclass discovery
- SVG icon support
- Automatic display name generation
Installation
Requirements
- Python 3.12 or 3.13
- PySide6
- System dependencies (Linux only):
libegl1libpulse0
Install from PyPI
pip install winipyside
Install from Source
git clone https://github.com/Winipedia/winipyside.git
cd winipyside
uv sync
Linux System Dependencies
sudo apt-get update
sudo apt-get install -y libegl1 libpulse0
Quick Start
Basic Application
from PySide6.QtWidgets import QApplication
from winipyside.src.ui.windows.base.base import Base as BaseWindow
from winipyside.src.ui.pages.browser import Browser
class MyApp(BaseWindow):
@classmethod
def get_all_page_classes(cls):
return [Browser]
@classmethod
def get_start_page_cls(cls):
return Browser
def pre_setup(self) -> None:
pass
def setup(self) -> None:
self.resize(1280, 720)
def post_setup(self) -> None:
pass
if __name__ == "__main__":
app = QApplication([])
window = MyApp()
window.show()
app.exec()
Encrypted Video Playback
from pathlib import Path
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from PySide6.QtCore import QUrl, QIODevice
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
from winipyside.src.core.py_qiodevice import EncryptedPyQFile
# Generate encryption key
key = AESGCM.generate_key(bit_length=256)
aes_gcm = AESGCM(key)
# Play encrypted video
video_path = Path("encrypted_video.mp4")
encrypted_file = EncryptedPyQFile(video_path, aes_gcm)
encrypted_file.open(QIODevice.OpenModeFlag.ReadOnly)
player = QMediaPlayer()
player.setAudioOutput(QAudioOutput())
player.setSourceDevice(encrypted_file, QUrl.fromLocalFile(str(video_path)))
player.play()
Toast Notifications
from winipyside.src.ui.widgets.notification import Notification
from pyqttoast import ToastIcon
Notification(
title="Success",
text="Operation completed successfully!",
icon=ToastIcon.SUCCESS,
duration=5000
)
Documentation
Comprehensive documentation is available in the docs/ directory:
- Core Package - Encrypted file I/O and QIODevice wrappers
- UI Base - Foundation framework and lifecycle management
- UI Widgets - Reusable widgets (Browser, MediaPlayer, Notifications)
- UI Pages - Page components for navigation
- UI Windows - Main window framework
- API Reference - Complete API documentation
Architecture
winipyside/
โโโ src/
โ โโโ core/ # Encrypted file I/O
โ โโโ ui/
โ โโโ base/ # Base classes and lifecycle
โ โโโ widgets/ # Reusable widgets
โ โโโ pages/ # Page components
โ โโโ windows/ # Window framework
โโโ resources/ # SVG icons and static resources
โโโ dev/
โโโ builders/ # Build utilities
โโโ cli/ # CLI commands
โโโ configs/ # CI/CD configuration
โโโ tests/ # Test fixtures
Development
Setup Development Environment
# Clone the repository
git clone https://github.com/Winipedia/winipyside.git
cd winipyside
# Install dependencies with uv
uv sync
# Install pre-commit hooks
uv run pre-commit install
# get familiar with pyrig
Contributing
Contributions are welcome! Please follow these guidelines:
- Fork the repository and create a feature branch
- Write tests for new functionality
- Ensure all tests pass and code quality checks succeed
- Update documentation as needed
- Submit a pull request with a clear description
Code Standards
- Follow Google docstring convention
- Maintain 100% type coverage
- Write comprehensive tests (aim for >90% coverage)
- Use descriptive variable names
- Keep functions focused and small
License
This project is licensed under the MIT License, see the LICENSE file for details.
Acknowledgments
- Built with Pyrig - Python project scaffolding framework
- Uses PySide6 - Qt for Python
- Toast notifications powered by pyqttoast
Support
- Documentation: docs/
- Issues: GitHub Issues
- Discussions: GitHub Discussions
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 Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file winipyside-2.1.88.tar.gz.
File metadata
- Download URL: winipyside-2.1.88.tar.gz
- Upload date:
- Size: 28.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c5771217a69b77d42d6952d65dadf6c2cc5cc5890d47d18d6565176dcfab09b
|
|
| MD5 |
a9e9c9895981694a7fd759f2c988456d
|
|
| BLAKE2b-256 |
981a25dac5f80366b72151e5a6a7a2fa58850962dcfb25f5556bd8d1dd0efa22
|
File details
Details for the file winipyside-2.1.88-py3-none-any.whl.
File metadata
- Download URL: winipyside-2.1.88-py3-none-any.whl
- Upload date:
- Size: 41.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89327c64308077fd7b8ee5bd00ab964a1d4a2fa9eb7d16d9061398497fd5924c
|
|
| MD5 |
4a83531850449198af9e2ef2c7f2d47a
|
|
| BLAKE2b-256 |
65bc15a3627a8df3e93a66e6eee8d0ca7b334fb6d11d019525921539c04bc31e
|