Skip to main content

A utilities package for PySide6

Project description

winipyside

SecurityChecker DependencyAuditor

VersionController RemoteVersionController ContainerEngine Pyrigger PackageManager

DocsBuilder Documentation

PreCommitter Linter MDLinter TypeChecker

PackageIndex ProgrammingLanguage License

ProjectTester ProjectCoverageTester

CI CD


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):
    • libegl1
    • libpulse0

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:

  1. Fork the repository and create a feature branch
  2. Write tests for new functionality
  3. Ensure all tests pass and code quality checks succeed
  4. Update documentation as needed
  5. 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


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

winipyside-2.1.99.tar.gz (28.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

winipyside-2.1.99-py3-none-any.whl (41.1 kB view details)

Uploaded Python 3

File details

Details for the file winipyside-2.1.99.tar.gz.

File metadata

  • Download URL: winipyside-2.1.99.tar.gz
  • Upload date:
  • Size: 28.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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

Hashes for winipyside-2.1.99.tar.gz
Algorithm Hash digest
SHA256 d12853ad7b078132c627e4097467f4b95abdd54fee9c91b059ecadd81c270439
MD5 f80a4ad106ebe1fe93d01be6d95121b7
BLAKE2b-256 1f01d879ded25d0a7843ec67986ea82330405569c2e66bc3732c5335e3c8e36e

See more details on using hashes here.

File details

Details for the file winipyside-2.1.99-py3-none-any.whl.

File metadata

  • Download URL: winipyside-2.1.99-py3-none-any.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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

Hashes for winipyside-2.1.99-py3-none-any.whl
Algorithm Hash digest
SHA256 077b9d6e9face096cf0e629b75bb3e51bc5d0b79e13a1a654f95dde211392888
MD5 872ad4ee2bb2ad79a6a55e771a290f7c
BLAKE2b-256 0f36acda354011ed86e19237c829b7b78c134bfddca326e1ec5fe2caa15b211a

See more details on using hashes here.

Supported by

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