winipyside 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- winipyside/__init__.py +1 -0
- winipyside/dev/__init__.py +1 -0
- winipyside/dev/artifacts/__init__.py +1 -0
- winipyside/dev/artifacts/builder/__init__.py +1 -0
- winipyside/dev/artifacts/builder/builder.py +4 -0
- winipyside/dev/artifacts/resources/__init__.py +1 -0
- winipyside/dev/artifacts/resources/delete_garbage_can.svg +2 -0
- winipyside/dev/artifacts/resources/download_arrow.svg +3 -0
- winipyside/dev/artifacts/resources/exit_fullscreen_icon.svg +7 -0
- winipyside/dev/artifacts/resources/fullscreen_icon.svg +4 -0
- winipyside/dev/artifacts/resources/menu_icon.svg +4 -0
- winipyside/dev/artifacts/resources/pause_icon.svg +4 -0
- winipyside/dev/artifacts/resources/play_icon.svg +17 -0
- winipyside/dev/artifacts/resources/plus_icon.svg +24 -0
- winipyside/dev/cli/__init__.py +1 -0
- winipyside/dev/cli/subcommands.py +6 -0
- winipyside/dev/configs/__init__.py +1 -0
- winipyside/dev/configs/configs.py +110 -0
- winipyside/dev/tests/__init__.py +1 -0
- winipyside/dev/tests/fixtures/__init__.py +1 -0
- winipyside/dev/tests/fixtures/fixture.py +7 -0
- winipyside/dev/tests/fixtures/scopes/__init__.py +1 -0
- winipyside/dev/tests/fixtures/scopes/class_.py +8 -0
- winipyside/dev/tests/fixtures/scopes/function.py +8 -0
- winipyside/dev/tests/fixtures/scopes/module.py +8 -0
- winipyside/dev/tests/fixtures/scopes/package.py +8 -0
- winipyside/dev/tests/fixtures/scopes/session.py +8 -0
- winipyside/main.py +19 -0
- winipyside/py.typed +0 -0
- winipyside/src/__init__.py +3 -0
- winipyside/src/core/__init__.py +1 -0
- winipyside/src/core/py_qiodevice.py +476 -0
- winipyside/src/ui/__init__.py +1 -0
- winipyside/src/ui/base/__init__.py +1 -0
- winipyside/src/ui/base/base.py +188 -0
- winipyside/src/ui/pages/__init__.py +1 -0
- winipyside/src/ui/pages/base/__init__.py +1 -0
- winipyside/src/ui/pages/base/base.py +92 -0
- winipyside/src/ui/pages/browser.py +26 -0
- winipyside/src/ui/pages/player.py +85 -0
- winipyside/src/ui/widgets/__init__.py +1 -0
- winipyside/src/ui/widgets/browser.py +243 -0
- winipyside/src/ui/widgets/clickable_widget.py +57 -0
- winipyside/src/ui/widgets/media_player.py +430 -0
- winipyside/src/ui/widgets/notification.py +77 -0
- winipyside/src/ui/windows/__init__.py +1 -0
- winipyside/src/ui/windows/base/__init__.py +1 -0
- winipyside/src/ui/windows/base/base.py +49 -0
- winipyside-2.0.1.dist-info/METADATA +284 -0
- winipyside-2.0.1.dist-info/RECORD +52 -0
- winipyside-2.0.1.dist-info/WHEEL +4 -0
- winipyside-2.0.1.dist-info/entry_points.txt +4 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: winipyside
|
|
3
|
+
Version: 2.0.1
|
|
4
|
+
Summary: A package for pyside utils
|
|
5
|
+
Author: Winipedia
|
|
6
|
+
Author-email: Winipedia <win.steveker@gmx.de>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Requires-Dist: pyqt-toast-notification
|
|
9
|
+
Requires-Dist: pyside6
|
|
10
|
+
Requires-Dist: winiutils
|
|
11
|
+
Requires-Python: >=3.12, <3.14
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
|
|
14
|
+
# winipyside
|
|
15
|
+
|
|
16
|
+
(This project uses [pyrig](https://github.com/Winipedia/pyrig))
|
|
17
|
+
|
|
18
|
+
A comprehensive PySide6 utilities package providing reusable components for building Qt desktop applications. Features include encrypted file I/O with AES-GCM, a full-featured media player with support for encrypted video playback, an embedded web browser with cookie management, toast notifications, and a modular page-based UI framework. Built with strict type safety and production-ready CI/CD workflows for headless environments.
|
|
19
|
+
|
|
20
|
+
## Features
|
|
21
|
+
|
|
22
|
+
### Core (`winipyside.src.core`)
|
|
23
|
+
|
|
24
|
+
**Advanced QIODevice Wrappers for PySide6**
|
|
25
|
+
|
|
26
|
+
- **`PyQIODevice`**: Python-friendly wrapper around Qt's QIODevice with enhanced functionality
|
|
27
|
+
- Provides clean Python interface to all QIODevice methods
|
|
28
|
+
- Seamless integration with PySide6's I/O system
|
|
29
|
+
- Support for sequential and random-access devices
|
|
30
|
+
|
|
31
|
+
- **`PyQFile`**: File-specific wrapper extending PyQIODevice
|
|
32
|
+
- Simplified file operations with Path support
|
|
33
|
+
- Compatible with Qt's media framework
|
|
34
|
+
|
|
35
|
+
- **`EncryptedPyQFile`**: Transparent AES-GCM encrypted file I/O
|
|
36
|
+
- **Chunked encryption** for efficient streaming of large files (64KB cipher chunks)
|
|
37
|
+
- **Position mapping** between encrypted and decrypted data for random access
|
|
38
|
+
- **Authenticated encryption** using AES-GCM with 12-byte nonces and 16-byte tags
|
|
39
|
+
- **Transparent decryption** - works seamlessly with Qt's QMediaPlayer for encrypted video playback
|
|
40
|
+
- Static methods for standalone encryption/decryption operations
|
|
41
|
+
- Secure random nonce generation per chunk
|
|
42
|
+
- Associated authenticated data (AAD) for additional security
|
|
43
|
+
|
|
44
|
+
**Use Cases:**
|
|
45
|
+
- Play encrypted media files without temporary decryption
|
|
46
|
+
- Secure file storage with transparent access
|
|
47
|
+
- Streaming large encrypted files with minimal memory overhead
|
|
48
|
+
|
|
49
|
+
**Example:**
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from pathlib import Path
|
|
53
|
+
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
|
54
|
+
from PySide6.QtCore import QUrl, QIODevice
|
|
55
|
+
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
|
|
56
|
+
from winipyside.src.core.py_qiodevice import EncryptedPyQFile, PyQFile
|
|
57
|
+
|
|
58
|
+
# Generate or load your encryption key
|
|
59
|
+
key = AESGCM.generate_key(bit_length=256)
|
|
60
|
+
aes_gcm = AESGCM(key)
|
|
61
|
+
|
|
62
|
+
# Play an encrypted video file
|
|
63
|
+
video_path = Path("encrypted_video.mp4")
|
|
64
|
+
encrypted_file = EncryptedPyQFile(video_path, aes_gcm)
|
|
65
|
+
encrypted_file.open(QIODevice.OpenModeFlag.ReadOnly)
|
|
66
|
+
|
|
67
|
+
# Use with QMediaPlayer - decryption happens transparently
|
|
68
|
+
player = QMediaPlayer()
|
|
69
|
+
player.setAudioOutput(QAudioOutput())
|
|
70
|
+
player.setSourceDevice(encrypted_file, QUrl.fromLocalFile(video_path))
|
|
71
|
+
player.play()
|
|
72
|
+
|
|
73
|
+
# Or use PyQFile for regular (unencrypted) files
|
|
74
|
+
regular_file = PyQFile(Path("video.mp4"))
|
|
75
|
+
regular_file.open(QIODevice.OpenModeFlag.ReadOnly)
|
|
76
|
+
player.setSourceDevice(regular_file, QUrl.fromLocalFile("video.mp4"))
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### UI Base (`winipyside.src.ui.base`)
|
|
80
|
+
|
|
81
|
+
**Foundation Framework for Qt Applications**
|
|
82
|
+
|
|
83
|
+
- **`Base`**: Abstract base class for all UI components with lifecycle management
|
|
84
|
+
- **Lifecycle hooks**: `base_setup()`, `pre_setup()`, `setup()`, `post_setup()`
|
|
85
|
+
- **Custom metaclass** (`QABCLoggingMeta`) combining ABC and Qt's metaclass for proper inheritance
|
|
86
|
+
- **Dynamic subclass discovery**: Automatically find and instantiate UI components
|
|
87
|
+
- **Page navigation**: Built-in methods for switching between pages in stacked layouts
|
|
88
|
+
- **SVG icon support**: Easy loading of SVG icons from resources
|
|
89
|
+
- **Display name generation**: Automatic human-readable names from class names
|
|
90
|
+
|
|
91
|
+
**Example:**
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
from winipyside.src.ui.base.base import Base
|
|
95
|
+
from PySide6.QtWidgets import QWidget
|
|
96
|
+
|
|
97
|
+
class MyCustomWidget(Base, QWidget):
|
|
98
|
+
def base_setup(self) -> None:
|
|
99
|
+
# Initialize Qt components
|
|
100
|
+
pass
|
|
101
|
+
|
|
102
|
+
def pre_setup(self) -> None:
|
|
103
|
+
# Setup before main initialization
|
|
104
|
+
pass
|
|
105
|
+
|
|
106
|
+
def setup(self) -> None:
|
|
107
|
+
# Main setup logic
|
|
108
|
+
self.setWindowTitle(self.get_display_name()) # "My Custom Widget"
|
|
109
|
+
|
|
110
|
+
def post_setup(self) -> None:
|
|
111
|
+
# Finalization after setup
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
# Discover all subclasses in your package
|
|
115
|
+
all_widgets = MyCustomWidget.get_subclasses()
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### UI Widgets (`winipyside.src.ui.widgets`)
|
|
119
|
+
|
|
120
|
+
**Ready-to-Use Qt Widgets**
|
|
121
|
+
|
|
122
|
+
- **`Notification`**: Toast notification system using pyqttoast
|
|
123
|
+
- **Auto-positioning**: Top-middle of screen
|
|
124
|
+
- **Smart text truncation**: Automatically fits text to window width
|
|
125
|
+
- **Customizable icons**: Information, warning, error, success
|
|
126
|
+
- **Duration control**: Configurable display time
|
|
127
|
+
|
|
128
|
+
- **`ClickableWidget` / `ClickableVideoWidget`**: Click-enabled widgets
|
|
129
|
+
- **Signal emission**: Emits `clicked` signal on left mouse button press
|
|
130
|
+
- **Video widget variant**: Clickable QVideoWidget for media applications
|
|
131
|
+
|
|
132
|
+
- **`Browser`**: Full-featured embedded web browser
|
|
133
|
+
- **Navigation controls**: Back, forward, address bar, go button
|
|
134
|
+
- **Cookie management**: Automatic cookie tracking and conversion
|
|
135
|
+
- **QNetworkCookie ↔ http.cookiejar.Cookie conversion**: Bridge Qt and Python cookie formats
|
|
136
|
+
- **Domain-based cookie access**: Retrieve cookies by domain
|
|
137
|
+
- **Auto-updates address bar**: Reflects current URL
|
|
138
|
+
|
|
139
|
+
- **`MediaPlayer`**: Comprehensive media player widget
|
|
140
|
+
- **Playback controls**: Play/pause, speed adjustment (0.2x-5x), volume slider
|
|
141
|
+
- **Progress control**: Seekable progress bar with throttled updates
|
|
142
|
+
- **Fullscreen support**: Toggle fullscreen with automatic widget hiding
|
|
143
|
+
- **Encrypted playback**: Native support for `EncryptedPyQFile`
|
|
144
|
+
- **Clickable video**: Click to toggle control visibility
|
|
145
|
+
- **Position resumption**: Resume playback from specific positions
|
|
146
|
+
- **Smart resource management**: Proper cleanup of IO devices
|
|
147
|
+
|
|
148
|
+
**Example:**
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
from winipyside.src.ui.widgets.notification import Notification
|
|
152
|
+
from winipyside.src.ui.widgets.media_player import MediaPlayer
|
|
153
|
+
from winipyside.src.ui.widgets.browser import Browser
|
|
154
|
+
from pyqttoast import ToastIcon
|
|
155
|
+
from PySide6.QtWidgets import QVBoxLayout
|
|
156
|
+
from pathlib import Path
|
|
157
|
+
|
|
158
|
+
# Show a notification
|
|
159
|
+
Notification(
|
|
160
|
+
title="Download Complete",
|
|
161
|
+
text="Your file has been downloaded successfully",
|
|
162
|
+
icon=ToastIcon.SUCCESS,
|
|
163
|
+
duration=5000
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# Create a media player
|
|
167
|
+
layout = QVBoxLayout()
|
|
168
|
+
player = MediaPlayer(layout)
|
|
169
|
+
player.play_file(Path("video.mp4"))
|
|
170
|
+
|
|
171
|
+
# Or play encrypted file
|
|
172
|
+
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
|
|
173
|
+
key = AESGCM.generate_key(bit_length=256)
|
|
174
|
+
aes_gcm = AESGCM(key)
|
|
175
|
+
player.play_encrypted_file(Path("encrypted.mp4"), aes_gcm)
|
|
176
|
+
|
|
177
|
+
# Create a browser
|
|
178
|
+
browser = Browser(layout)
|
|
179
|
+
# Cookies are automatically tracked
|
|
180
|
+
cookies = browser.get_domain_http_cookies("example.com")
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### UI Pages (`winipyside.src.ui.pages`)
|
|
184
|
+
|
|
185
|
+
**Page Components for Stacked Navigation**
|
|
186
|
+
|
|
187
|
+
- **`pages.base.Base`**: Base page class for application pages
|
|
188
|
+
- **Menu dropdown**: Automatic navigation menu to all pages
|
|
189
|
+
- **Page switching**: Built-in methods to navigate between pages
|
|
190
|
+
- **Layout management**: Pre-configured vertical and horizontal layouts
|
|
191
|
+
- **Window integration**: Automatic registration with parent window
|
|
192
|
+
|
|
193
|
+
- **`Player`**: Media player page
|
|
194
|
+
- **Abstract playback method**: Customizable `start_playback()` for your use case
|
|
195
|
+
- **Integrated MediaPlayer widget**: Full media player functionality
|
|
196
|
+
- **Encrypted file support**: Play encrypted videos with `play_encrypted_file()`
|
|
197
|
+
- **Auto page switching**: Automatically switches to player page on playback
|
|
198
|
+
|
|
199
|
+
- **`Browser`**: Web browser page
|
|
200
|
+
- **Embedded browser widget**: Full web browsing capability
|
|
201
|
+
- **Cookie access**: Retrieve cookies from browsing sessions
|
|
202
|
+
|
|
203
|
+
**Example:**
|
|
204
|
+
|
|
205
|
+
```python
|
|
206
|
+
from winipyside.src.ui.pages.player import Player
|
|
207
|
+
from winipyside.src.ui.pages.browser import Browser
|
|
208
|
+
from winipyside.src.ui.windows.base.base import Base as BaseWindow
|
|
209
|
+
from pathlib import Path
|
|
210
|
+
|
|
211
|
+
class MyPlayerPage(Player):
|
|
212
|
+
def start_playback(self, path: Path, position: int = 0) -> None:
|
|
213
|
+
# Custom playback logic
|
|
214
|
+
self.play_file(path, position)
|
|
215
|
+
|
|
216
|
+
class MyWindow(BaseWindow):
|
|
217
|
+
@classmethod
|
|
218
|
+
def get_all_page_classes(cls):
|
|
219
|
+
return [MyPlayerPage, Browser]
|
|
220
|
+
|
|
221
|
+
@classmethod
|
|
222
|
+
def get_start_page_cls(cls):
|
|
223
|
+
return Browser
|
|
224
|
+
|
|
225
|
+
def pre_setup(self) -> None:
|
|
226
|
+
pass
|
|
227
|
+
|
|
228
|
+
def setup(self) -> None:
|
|
229
|
+
pass
|
|
230
|
+
|
|
231
|
+
def post_setup(self) -> None:
|
|
232
|
+
pass
|
|
233
|
+
|
|
234
|
+
# Pages automatically get menu navigation between each other
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### UI Windows (`winipyside.src.ui.windows`)
|
|
238
|
+
|
|
239
|
+
**Main Window Framework**
|
|
240
|
+
|
|
241
|
+
- **`windows.base.Base`**: Base window class (QMainWindow)
|
|
242
|
+
- **QStackedWidget integration**: Automatic page stacking and switching
|
|
243
|
+
- **Abstract page configuration**: Define pages via `get_all_page_classes()`
|
|
244
|
+
- **Start page selection**: Set initial page with `get_start_page_cls()`
|
|
245
|
+
- **Automatic page creation**: Pages are instantiated and added automatically
|
|
246
|
+
- **Window title**: Auto-generated from class name
|
|
247
|
+
|
|
248
|
+
**Example:**
|
|
249
|
+
|
|
250
|
+
```python
|
|
251
|
+
from winipyside.src.ui.windows.base.base import Base as BaseWindow
|
|
252
|
+
from winipyside.src.ui.pages.player import Player
|
|
253
|
+
from winipyside.src.ui.pages.browser import Browser
|
|
254
|
+
from PySide6.QtWidgets import QApplication
|
|
255
|
+
|
|
256
|
+
class MyApp(BaseWindow):
|
|
257
|
+
@classmethod
|
|
258
|
+
def get_all_page_classes(cls):
|
|
259
|
+
return [Player, Browser]
|
|
260
|
+
|
|
261
|
+
@classmethod
|
|
262
|
+
def get_start_page_cls(cls):
|
|
263
|
+
return Browser
|
|
264
|
+
|
|
265
|
+
def pre_setup(self) -> None:
|
|
266
|
+
# Setup before pages are created
|
|
267
|
+
pass
|
|
268
|
+
|
|
269
|
+
def setup(self) -> None:
|
|
270
|
+
# Main window setup
|
|
271
|
+
self.resize(1280, 720)
|
|
272
|
+
|
|
273
|
+
def post_setup(self) -> None:
|
|
274
|
+
# Finalization
|
|
275
|
+
pass
|
|
276
|
+
|
|
277
|
+
# Run the application
|
|
278
|
+
app = QApplication([])
|
|
279
|
+
window = MyApp()
|
|
280
|
+
window.show()
|
|
281
|
+
app.exec()
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
winipyside/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
2
|
+
winipyside/dev/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
3
|
+
winipyside/dev/artifacts/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
4
|
+
winipyside/dev/artifacts/builder/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
5
|
+
winipyside/dev/artifacts/builder/builder.py,sha256=DdbLRMGQQdPgtYu8DSOZrw8Ukz5EmStSq4etgShh6_I,96
|
|
6
|
+
winipyside/dev/artifacts/resources/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
7
|
+
winipyside/dev/artifacts/resources/delete_garbage_can.svg,sha256=UxEEh46w1JD4VViUBx-Ahaq5_ZR4zOjfeJn5_aM8114,318
|
|
8
|
+
winipyside/dev/artifacts/resources/download_arrow.svg,sha256=8g_cBwKFHyoeSmaLMXcGwIHT4_rZDDtDGm35E0PkniE,242
|
|
9
|
+
winipyside/dev/artifacts/resources/exit_fullscreen_icon.svg,sha256=sZSexEjab82zhAK3JRtOWH19aAFa1GhuGLChDz9wFFc,523
|
|
10
|
+
winipyside/dev/artifacts/resources/fullscreen_icon.svg,sha256=mm2n6WvaSu0OqiQSAw0QPNwzXpPLaF53_XAklUfQQPo,406
|
|
11
|
+
winipyside/dev/artifacts/resources/menu_icon.svg,sha256=pA1Z_x5gDkhYLQA0dL0l_8uBP-e6mKLcEOYwlhURUv4,344
|
|
12
|
+
winipyside/dev/artifacts/resources/pause_icon.svg,sha256=z-Cj3DOI0rwRbWCOhaiHtDQYM4s6OgkCBVcdip77rQE,179
|
|
13
|
+
winipyside/dev/artifacts/resources/play_icon.svg,sha256=7gx1EWZnyu1pA6WboAfVH3OGcp_uYPpT1syqHe-jaGE,953
|
|
14
|
+
winipyside/dev/artifacts/resources/plus_icon.svg,sha256=1ucedu8ucLI7LMNsfNN2GYiwNUe8-ViNBcanDwzTqHc,552
|
|
15
|
+
winipyside/dev/cli/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
16
|
+
winipyside/dev/cli/subcommands.py,sha256=iurWZwJwEKAfGpfjkn1YOhnRbIruCB4ouE-8R_Lh3JY,228
|
|
17
|
+
winipyside/dev/configs/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
18
|
+
winipyside/dev/configs/configs.py,sha256=0J9bicIbKHVCpwd812fLJqTqM-h_nTdTc9u4fJtr5Kg,3404
|
|
19
|
+
winipyside/dev/tests/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
20
|
+
winipyside/dev/tests/fixtures/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
21
|
+
winipyside/dev/tests/fixtures/fixture.py,sha256=fA8GaETQ0foL1CEqvmxf6ab2Wz-_CxxI-ttkj8CUmok,263
|
|
22
|
+
winipyside/dev/tests/fixtures/scopes/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
23
|
+
winipyside/dev/tests/fixtures/scopes/class_.py,sha256=ZuI8_LEGy8SiutoygpgQq5_ojjlJRP-fNxDuhEzLj7M,417
|
|
24
|
+
winipyside/dev/tests/fixtures/scopes/function.py,sha256=2ehbrDhtw581pKmvY0KvuDkPCma8E19TyZboOb80L2I,428
|
|
25
|
+
winipyside/dev/tests/fixtures/scopes/module.py,sha256=OwdimjLzNMnsFT2th3OW5ZKP2YzjelC2NJ6jhSPrMMo,420
|
|
26
|
+
winipyside/dev/tests/fixtures/scopes/package.py,sha256=yTDD_7UcWdml7uahvIQ4XQKVeVl-TqAAFtbe9t9VG9c,424
|
|
27
|
+
winipyside/dev/tests/fixtures/scopes/session.py,sha256=MSN62vUCdpSPWBl9wYrEWu4qAmqwyINscgat2Rocp9M,423
|
|
28
|
+
winipyside/main.py,sha256=-w752ghb91kXeuIO1rvOiN_nGypBpQqLCJxVqMBP82c,409
|
|
29
|
+
winipyside/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
winipyside/src/__init__.py,sha256=4h5GWbLSKlFjaNIUbEAiX1wambPOxlE50TWTJnHGs3s,43
|
|
31
|
+
winipyside/src/core/__init__.py,sha256=ymA82gqpwH4kISijecxTUN0J8GCbmkuIGTxq_vCNnnI,44
|
|
32
|
+
winipyside/src/core/py_qiodevice.py,sha256=5onTJAE4Q328ACXrubZ2RsBO_PdJm0rXV6ZgqnzV4aU,15313
|
|
33
|
+
winipyside/src/ui/__init__.py,sha256=f_Zr5JydpAkNrScLEFXOFvFNfvCKM39kQw_jq9-trFA,42
|
|
34
|
+
winipyside/src/ui/base/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
35
|
+
winipyside/src/ui/base/base.py,sha256=57_UJq8wJHXB-0_lNDo_oMhFEpOztHKaoEvRq2uQPlE,5759
|
|
36
|
+
winipyside/src/ui/pages/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
37
|
+
winipyside/src/ui/pages/base/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
38
|
+
winipyside/src/ui/pages/base/base.py,sha256=GKRVhvFVk6ofrBx9-Q353ItkVdHpakZuz5FqihVb5eg,2932
|
|
39
|
+
winipyside/src/ui/pages/browser.py,sha256=YM5kCB-rBdQ_fKGb77tOJIjn9VRIyFdMNyhSeZIcaRM,792
|
|
40
|
+
winipyside/src/ui/pages/player.py,sha256=CXUrganoWW_IHXXe3o7fjAYfZ_1xWW2FtbnhW0pIyfQ,2705
|
|
41
|
+
winipyside/src/ui/widgets/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
42
|
+
winipyside/src/ui/widgets/browser.py,sha256=KFuICHUTX_8w5DfgJ3IbTu6ipuiuo-mTJku5tg-qSz0,8171
|
|
43
|
+
winipyside/src/ui/widgets/clickable_widget.py,sha256=yMph7whLS6Bw65gf56LHdkZg-JzjWHUnSh3WW3IK25U,1722
|
|
44
|
+
winipyside/src/ui/widgets/media_player.py,sha256=hIklO-1x4ry2L5TpaeyUtiE7FAfyvZ09gBT4R1kckBc,15752
|
|
45
|
+
winipyside/src/ui/widgets/notification.py,sha256=UOm8ZaeWXkqtQtMqjsJ58noB5yOl-X_fId9PioabTug,2492
|
|
46
|
+
winipyside/src/ui/windows/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
47
|
+
winipyside/src/ui/windows/base/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
|
|
48
|
+
winipyside/src/ui/windows/base/base.py,sha256=PuHBZlcKe7BGqu3hvkNi2BrE5kO3Z7-_JsKH7W6kV9E,1374
|
|
49
|
+
winipyside-2.0.1.dist-info/WHEEL,sha256=3id4o64OvRm9dUknh3mMJNcfoTRK08ua5cU6DFyVy-4,79
|
|
50
|
+
winipyside-2.0.1.dist-info/entry_points.txt,sha256=UHdZ1NF5NTI221PhwsZi4P-U1q7uIVozqStA-sw0it0,97
|
|
51
|
+
winipyside-2.0.1.dist-info/METADATA,sha256=qkB-WZnjhbolxFdMMbuKbbUujXKg3QcgAq89s5P8r2M,9896
|
|
52
|
+
winipyside-2.0.1.dist-info/RECORD,,
|