Skip to main content

winipyside

CI CD ProjectTester

ByteOrderMarkerFormatter CICDLinter CICDSecurityChecker CaseConflictChecker DeadCodeChecker DependencyChecker EndOfFileFormatter EndOfLineFormatter JSONFormatter JSONLinter LargeFileChecker MarkdownLinter MergeConflictChecker ModuleTestNamingChecker PythonLinter SecretsChecker SecurityChecker ShellFormatter ShellLinter SpellChecker TOMLLinter TrailingWhitespaceFormatter TypeChecker YAMLLinter

PackageManager Pyrigger RemoteVersionController VersionControlHookManager VersionController

DocsBuilder PackageIndex ProgrammingLanguage License


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


Metadata

Release files for winipyside 4.14.119

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for winipyside 4.14.119
File Size Uploaded
winipyside-4.14.119.tar.gz 32.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for winipyside 4.14.119
File Interpreter ABI Platform
winipyside-4.14.119-py3-none-any.whl Python 3 none any Details

Total release size: 74.1 kB

Release files / winipyside-4.14.119.tar.gz

Download URL winipyside-4.14.119.tar.gz
Size 32.3 kB
Tags Source
SHA-256 checksum
How to use checksums
bc75901ff1594c0348c4c8be1ab1b8dc81b941265d468896eefede80df36103d
BLAKE2b-256 checksum
How to use checksums
ccfbc846cd05a7cf634cfb79cfdca5c53999064d4c2029a02a6204a7a022624c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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}

Release files / winipyside-4.14.119-py3-none-any.whl

Download URL winipyside-4.14.119-py3-none-any.whl
Size 41.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1b52c4a567ef02c8699e4c38b1e333884388b359037d2dff81b57ace1b11839e
BLAKE2b-256 checksum
How to use checksums
6e4d23a1f8cc8dc627215ac65c074b0bf9ed21b266518267678e51b4a127e77f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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}

Release history Release notifications | RSS feed

This release

4.14.119 This release

2 release files

4.14.9

2 release files

4.14.8

2 release files

4.14.7

2 release files

4.14.6

2 release files

4.14.5

2 release files

4.14.3

2 release files

4.14.2

2 release files

4.14.1

2 release files

4.14.0

2 release files

4.13.0

2 release files

4.12.0

2 release files

4.11.0

2 release files

4.2.0

2 release files

4.1.6

2 release files

4.1.3

2 release files

4.1.2

2 release files

4.1.0

2 release files

4.0.9

2 release files

4.0.8

2 release files

4.0.7

2 release files

4.0.6

2 release files

4.0.5

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.1.7

2 release files

3.1.6

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.18.0

2 release files

2.17.0

2 release files

2.16.0

2 release files

2.11.0

2 release files

2.10.0

2 release files

2.8.0

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.4

2 release files

2.5.3

2 release files

2.5.2

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.8

2 release files

2.2.7

2 release files

2.2.6

2 release files

2.2.5

2 release files

2.2.4

2 release files

2.2.3

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.99

2 release files

2.1.98

2 release files

2.1.97

2 release files

2.1.96

2 release files

2.1.95

2 release files

2.1.94

2 release files

2.1.93

2 release files

2.1.92

2 release files

2.1.91

2 release files

2.1.87

2 release files

2.1.85

2 release files

2.1.84

2 release files

2.1.83

2 release files

2.1.82

2 release files

2.1.81

2 release files

2.1.80

2 release files

2.1.79

2 release files

2.1.78

2 release files

2.1.77

2 release files

2.1.72

2 release files

2.1.71

2 release files

2.1.70

2 release files

2.1.69

2 release files

2.1.68

2 release files

2.1.67

2 release files

2.1.66

2 release files

2.1.65

2 release files

2.1.64

2 release files

2.1.63

2 release files

2.1.62

2 release files

2.1.51

2 release files

2.1.50

2 release files

2.1.49

2 release files

2.1.48

2 release files

2.1.47

2 release files

2.1.46

2 release files

2.1.45

2 release files

2.1.44

2 release files

2.1.43

2 release files

2.1.42

2 release files

2.1.41

2 release files

2.1.40

2 release files

2.1.39

2 release files

2.1.38

2 release files

2.1.37

2 release files

2.1.36

2 release files

2.1.35

2 release files

2.1.34

2 release files

2.1.33

2 release files

2.1.32

2 release files

2.1.31

2 release files

2.1.30

2 release files

2.1.29

2 release files

2.1.28

2 release files

2.1.27

2 release files

2.1.26

2 release files

2.1.25

2 release files

2.1.24

2 release files

2.1.23

2 release files

2.1.22

2 release files

2.1.9

2 release files

2.1.8

2 release files

2.1.7

2 release files

2.1.6

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page