remotedesktop 0.0.1__tar.gz

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.
@@ -0,0 +1,24 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+
9
+ # Virtual environments
10
+ .venv/
11
+ venv/
12
+
13
+ # Testing
14
+ .pytest_cache/
15
+ .coverage
16
+ htmlcov/
17
+
18
+ # Tooling caches
19
+ .mypy_cache/
20
+ .ruff_cache/
21
+
22
+ # IDE
23
+ .idea/
24
+ .vscode/
@@ -0,0 +1,38 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What This Project Is
6
+
7
+ A Python client/server remote desktop GUI application (PySide6) for Windows computers on the same LAN, per `readme.md`:
8
+
9
+ - **Autodiscovery and connection** of servers on the LAN.
10
+ - **In scope:** desktop screen, keyboard, mouse, and clipboard.
11
+ - **Out of scope:** shared drives, devices, and multimedia (e.g., audio).
12
+ - **Two GUI apps:** a client and a server, each run on its respective computer.
13
+ - **Trust model:** on first connection, the user on the server side must explicitly permit the client. After that, the client may reconnect whenever the server is running without further approval.
14
+ - **Constraint:** does not use Windows RDP and does not rely on any Microsoft-based authentication.
15
+
16
+ Both apps are currently window stubs with no networking implemented.
17
+
18
+ ## Commands
19
+
20
+ Managed with `uv` (hatchling build backend, src layout):
21
+
22
+ - `uv sync` — create/update the venv with the project and dev dependencies
23
+ - `uv run pytest` — run all tests
24
+ - `uv run pytest tests/test_smoke.py::test_version` — run a single test
25
+ - `uv run remotedesktop-client` / `uv run remotedesktop-server` — launch the apps. These are `gui-scripts`, so they run detached with no console output; use `uv run python -m remotedesktop.client` (or `.server`) when you need stdout/tracebacks.
26
+ - `uv build` — build sdist and wheel into `dist/`
27
+ - `uv publish` — publish to PyPI
28
+
29
+ ## Architecture
30
+
31
+ - Both apps are PySide6 GUI applications. `src/remotedesktop/client.py` (`ClientWindow`) and `src/remotedesktop/server.py` (`ServerWindow`) hold the app entry points; `main()` in each is wired to the `remotedesktop-client` / `remotedesktop-server` GUI scripts in `pyproject.toml`.
32
+ - The client-side remote desktop view is a widget, `ViewerWidget` in `src/remotedesktop/viewer.py`, hosted as `ClientWindow`'s central widget. Screen display and keyboard/mouse/clipboard forwarding belong in this widget, not in the window.
33
+ - The package version lives only in `src/remotedesktop/__init__.py` (`__version__`); hatchling reads it from there (`[tool.hatch.version]`), so bump it in that one place.
34
+ - Widget tests need a `QApplication`; use the session-scoped `qapp` fixture in `tests/conftest.py`.
35
+
36
+ ## Environment Notes
37
+
38
+ - Target platform is Windows; development happens on Windows 11. Requires Python >=3.14.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 James Abel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,35 @@
1
+ Metadata-Version: 2.4
2
+ Name: remotedesktop
3
+ Version: 0.0.1
4
+ Summary: Remote desktop client/server for Windows computers on the same LAN, with autodiscovery. Provides screen, keyboard, mouse, and clipboard sharing without RDP or Microsoft authentication.
5
+ Author-email: James Abel <j@abel.co>
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Classifier: Development Status :: 2 - Pre-Alpha
9
+ Classifier: Environment :: Win32 (MS Windows)
10
+ Classifier: Intended Audience :: End Users/Desktop
11
+ Classifier: Operating System :: Microsoft :: Windows
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: System :: Networking
14
+ Requires-Python: >=3.14
15
+ Requires-Dist: pyside6>=6.11.1
16
+ Description-Content-Type: text/markdown
17
+
18
+ # Remote Desktop
19
+
20
+ This is a Python client/server application that provide remote desktop
21
+ for Windows computers on the same LAN. It offers autodiscovery and
22
+ connection.
23
+
24
+ Connections to the desktop screen, keyboard, mouse, and clipboard are made.
25
+ Other connections are not provide, such as shared drives, devices, nor
26
+ multimedia (e.g., audio)
27
+
28
+ The client and server apps are both run on their respective computers.
29
+ The client requests connection to the server and for the initial connection
30
+ the user on the server side must permit the connection. After that,
31
+ the client can connect to the server whenever the server is running
32
+ without the server having to provide permission.
33
+
34
+ This does not use Windows RDP nor rely on any Microsoft based authentication.
35
+
@@ -0,0 +1,38 @@
1
+ [project]
2
+ name = "remotedesktop"
3
+ dynamic = ["version"]
4
+ description = "Remote desktop client/server for Windows computers on the same LAN, with autodiscovery. Provides screen, keyboard, mouse, and clipboard sharing without RDP or Microsoft authentication."
5
+ readme = "readme.md"
6
+ license = "MIT"
7
+ authors = [{ name = "James Abel", email = "j@abel.co" }]
8
+ requires-python = ">=3.14"
9
+ classifiers = [
10
+ "Development Status :: 2 - Pre-Alpha",
11
+ "Environment :: Win32 (MS Windows)",
12
+ "Intended Audience :: End Users/Desktop",
13
+ "Operating System :: Microsoft :: Windows",
14
+ "Programming Language :: Python :: 3",
15
+ "Topic :: System :: Networking",
16
+ ]
17
+ dependencies = [
18
+ "pyside6>=6.11.1",
19
+ ]
20
+
21
+ [project.gui-scripts]
22
+ remotedesktop-client = "remotedesktop.client:main"
23
+ remotedesktop-server = "remotedesktop.server:main"
24
+
25
+ [dependency-groups]
26
+ dev = [
27
+ "pytest>=8",
28
+ ]
29
+
30
+ [build-system]
31
+ requires = ["hatchling"]
32
+ build-backend = "hatchling.build"
33
+
34
+ [tool.hatch.version]
35
+ path = "src/remotedesktop/__init__.py"
36
+
37
+ [tool.pytest.ini_options]
38
+ testpaths = ["tests"]
@@ -0,0 +1,18 @@
1
+ # Remote Desktop
2
+
3
+ This is a Python client/server application that provide remote desktop
4
+ for Windows computers on the same LAN. It offers autodiscovery and
5
+ connection.
6
+
7
+ Connections to the desktop screen, keyboard, mouse, and clipboard are made.
8
+ Other connections are not provide, such as shared drives, devices, nor
9
+ multimedia (e.g., audio)
10
+
11
+ The client and server apps are both run on their respective computers.
12
+ The client requests connection to the server and for the initial connection
13
+ the user on the server side must permit the connection. After that,
14
+ the client can connect to the server whenever the server is running
15
+ without the server having to provide permission.
16
+
17
+ This does not use Windows RDP nor rely on any Microsoft based authentication.
18
+
@@ -0,0 +1 @@
1
+ claude --permission-mode acceptEdits --dangerously-skip-permissions
@@ -0,0 +1,3 @@
1
+ """Remote desktop client/server for Windows computers on the same LAN."""
2
+
3
+ __version__ = "0.0.1"
@@ -0,0 +1,27 @@
1
+ """Client GUI application: discovers servers on the LAN, connects to one,
2
+ and shows its desktop in a viewer widget."""
3
+
4
+ import sys
5
+
6
+ from PySide6.QtWidgets import QApplication, QMainWindow
7
+
8
+ from remotedesktop.viewer import ViewerWidget
9
+
10
+
11
+ class ClientWindow(QMainWindow):
12
+ def __init__(self) -> None:
13
+ super().__init__()
14
+ self.setWindowTitle("Remote Desktop Client")
15
+ self.viewer = ViewerWidget(self)
16
+ self.setCentralWidget(self.viewer)
17
+
18
+
19
+ def main() -> None:
20
+ app = QApplication(sys.argv)
21
+ window = ClientWindow()
22
+ window.show()
23
+ raise SystemExit(app.exec())
24
+
25
+
26
+ if __name__ == "__main__":
27
+ main()
@@ -0,0 +1,27 @@
1
+ """Server GUI application: shares this computer's desktop with permitted
2
+ clients and prompts the user to approve first-time connections."""
3
+
4
+ import sys
5
+
6
+ from PySide6.QtCore import Qt
7
+ from PySide6.QtWidgets import QApplication, QLabel, QMainWindow
8
+
9
+
10
+ class ServerWindow(QMainWindow):
11
+ def __init__(self) -> None:
12
+ super().__init__()
13
+ self.setWindowTitle("Remote Desktop Server")
14
+ self.setCentralWidget(
15
+ QLabel("Not sharing", alignment=Qt.AlignmentFlag.AlignCenter)
16
+ )
17
+
18
+
19
+ def main() -> None:
20
+ app = QApplication(sys.argv)
21
+ window = ServerWindow()
22
+ window.show()
23
+ raise SystemExit(app.exec())
24
+
25
+
26
+ if __name__ == "__main__":
27
+ main()
@@ -0,0 +1,15 @@
1
+ """Viewer widget that displays the remote desktop inside the client GUI."""
2
+
3
+ from PySide6.QtCore import Qt
4
+ from PySide6.QtWidgets import QLabel, QVBoxLayout, QWidget
5
+
6
+
7
+ class ViewerWidget(QWidget):
8
+ """Displays the remote desktop screen and will forward keyboard, mouse,
9
+ and clipboard events to the connected server."""
10
+
11
+ def __init__(self, parent: QWidget | None = None) -> None:
12
+ super().__init__(parent)
13
+ self._placeholder = QLabel("Not connected", alignment=Qt.AlignmentFlag.AlignCenter)
14
+ layout = QVBoxLayout(self)
15
+ layout.addWidget(self._placeholder)
@@ -0,0 +1,7 @@
1
+ import pytest
2
+ from PySide6.QtWidgets import QApplication
3
+
4
+
5
+ @pytest.fixture(scope="session")
6
+ def qapp() -> QApplication:
7
+ return QApplication.instance() or QApplication([])
@@ -0,0 +1,18 @@
1
+ import remotedesktop
2
+ from remotedesktop.client import ClientWindow
3
+ from remotedesktop.server import ServerWindow
4
+ from remotedesktop.viewer import ViewerWidget
5
+
6
+
7
+ def test_version() -> None:
8
+ assert remotedesktop.__version__
9
+
10
+
11
+ def test_client_window_hosts_viewer(qapp) -> None:
12
+ window = ClientWindow()
13
+ assert isinstance(window.centralWidget(), ViewerWidget)
14
+
15
+
16
+ def test_server_window(qapp) -> None:
17
+ window = ServerWindow()
18
+ assert window.windowTitle() == "Remote Desktop Server"
@@ -0,0 +1,142 @@
1
+ version = 1
2
+ revision = 3
3
+ requires-python = ">=3.14"
4
+
5
+ [[package]]
6
+ name = "colorama"
7
+ version = "0.4.6"
8
+ source = { registry = "https://pypi.org/simple" }
9
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
10
+ wheels = [
11
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
12
+ ]
13
+
14
+ [[package]]
15
+ name = "iniconfig"
16
+ version = "2.3.0"
17
+ source = { registry = "https://pypi.org/simple" }
18
+ sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
19
+ wheels = [
20
+ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
21
+ ]
22
+
23
+ [[package]]
24
+ name = "packaging"
25
+ version = "26.2"
26
+ source = { registry = "https://pypi.org/simple" }
27
+ sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
28
+ wheels = [
29
+ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
30
+ ]
31
+
32
+ [[package]]
33
+ name = "pluggy"
34
+ version = "1.6.0"
35
+ source = { registry = "https://pypi.org/simple" }
36
+ sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
37
+ wheels = [
38
+ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
39
+ ]
40
+
41
+ [[package]]
42
+ name = "pygments"
43
+ version = "2.20.0"
44
+ source = { registry = "https://pypi.org/simple" }
45
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
46
+ wheels = [
47
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
48
+ ]
49
+
50
+ [[package]]
51
+ name = "pyside6"
52
+ version = "6.11.1"
53
+ source = { registry = "https://pypi.org/simple" }
54
+ dependencies = [
55
+ { name = "pyside6-addons" },
56
+ { name = "pyside6-essentials" },
57
+ { name = "shiboken6" },
58
+ ]
59
+ wheels = [
60
+ { url = "https://files.pythonhosted.org/packages/da/a6/27ba5947ed48918f7b74b7c43a1e280aac069e36f25adeb4c9adfac835c4/pyside6-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:537682c3b7530817203e667c1f5a2f00486b37bf52c52eeab438544c7a0917f6", size = 571921, upload-time = "2026-05-13T09:47:36.402Z" },
61
+ { url = "https://files.pythonhosted.org/packages/d8/de/af89d71410c83b10654d86ff9aff2a4f87c30163658f1cc145242e222526/pyside6-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b1fc521ba2bb5109425ab8add06bddbdd524abcad06cfa012cc39a22a189feb2", size = 572102, upload-time = "2026-05-13T09:47:38.249Z" },
62
+ { url = "https://files.pythonhosted.org/packages/b6/0e/d583bd3f7bf5046a4497b36f3902cfb64aa29554489a5a25c18e6b4ac0ac/pyside6-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:75f0005c3eb95c07cfb65522ec50d0815ac007a96482c21dc3cb4b4c04895d84", size = 572098, upload-time = "2026-05-13T09:47:39.44Z" },
63
+ { url = "https://files.pythonhosted.org/packages/57/f2/d9d8ce1373dabb37e5919f63cd18446556079631d3f2eea3ada03c29f6b8/pyside6-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:0968877ab1fb4ef3587a284da6fe05e8647ada56a6a3750b6395188e01f4aba6", size = 578377, upload-time = "2026-05-13T09:47:40.76Z" },
64
+ { url = "https://files.pythonhosted.org/packages/96/02/a6057d8bd2bdb1940820fff2d627fdf4013148c9c57adf69fa40d3452ac3/pyside6-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:acee467cb5f256cc47ebb9d815a054c1d8416da380c191b247a76d164aa3f805", size = 561765, upload-time = "2026-05-13T09:47:41.9Z" },
65
+ ]
66
+
67
+ [[package]]
68
+ name = "pyside6-addons"
69
+ version = "6.11.1"
70
+ source = { registry = "https://pypi.org/simple" }
71
+ dependencies = [
72
+ { name = "pyside6-essentials" },
73
+ { name = "shiboken6" },
74
+ ]
75
+ wheels = [
76
+ { url = "https://files.pythonhosted.org/packages/3f/6b/8bc94aff48b63f788f2d84e5467c12362d68906ba742c0942f46cb04c879/pyside6_addons-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:54733c77f789bef5f03c6aff4ad3bec8b2eff021f0cfcbc53d5e6c250ded24f9", size = 331714589, upload-time = "2026-05-13T09:39:12.36Z" },
77
+ { url = "https://files.pythonhosted.org/packages/dd/62/fb1428a523b2a4541e232aab50d9e789e6b4526f37fd9593452a7ea5b6b3/pyside6_addons-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6c65fbd73a512d6f72cda8d8277444a85a34dc99dd1dae9c21d35b8671bb1f", size = 175063224, upload-time = "2026-05-13T09:39:34.185Z" },
78
+ { url = "https://files.pythonhosted.org/packages/ee/9b/2ccd52f66db55c06de65d0501170a1935d04d64d0a230c0d892284a02ce3/pyside6_addons-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:bf1c6c4e954e5eba3d2a7c661ad4b9689e8f09c7f4a16bdf29713371d11af993", size = 170553429, upload-time = "2026-05-13T09:39:54.424Z" },
79
+ { url = "https://files.pythonhosted.org/packages/9a/bd/8adc4d350b3b363f3dfc8fccdcf5bfed25f7e36c2fff30c64e106f4f1572/pyside6_addons-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:0d13c4dfd671b050a48e4f8d8ddc724b7248f9c0437e7fc47fdf316278572923", size = 168816308, upload-time = "2026-05-13T09:40:13.541Z" },
80
+ { url = "https://files.pythonhosted.org/packages/65/b7/9a840d97f0f0f04e372a87e205dd30ee285b4e3b021b188459a917c9dc76/pyside6_addons-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:3494f480dee92f415be2f2d989c0b3f4755ac332b28045cbf4ba0f5c5a22ba37", size = 35759347, upload-time = "2026-05-13T09:40:21.199Z" },
81
+ ]
82
+
83
+ [[package]]
84
+ name = "pyside6-essentials"
85
+ version = "6.11.1"
86
+ source = { registry = "https://pypi.org/simple" }
87
+ dependencies = [
88
+ { name = "shiboken6" },
89
+ ]
90
+ wheels = [
91
+ { url = "https://files.pythonhosted.org/packages/b3/da/10d9197e7370eb4fed8df5fc547b7548dec88e5c5949e2d450db4ae96feb/pyside6_essentials-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:228de53c2bc26b07e5021fbe3614fc44ca08e4dab9999af08c2b389d2c239957", size = 110352945, upload-time = "2026-05-13T09:43:08.006Z" },
92
+ { url = "https://files.pythonhosted.org/packages/5c/49/0e1237c4400bec7e335d2c4eeb49bc40d9fd88a9ac44ca9083ce1abdc308/pyside6_essentials-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:e3ef7027b41e4e55fadb56e3b3257dc8ee92154b639fe67fc4c8e05e9d976c60", size = 79908535, upload-time = "2026-05-13T09:43:24.836Z" },
93
+ { url = "https://files.pythonhosted.org/packages/4c/c5/da4c5f23c6540ac5211a1f60177c8dee84b1bf40f2719479587ab8c60731/pyside6_essentials-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:a039b6da68a3a4b9d243217b2b98d475eed3f617159ef6be925badab53c11b0d", size = 78960051, upload-time = "2026-05-13T09:43:35.423Z" },
94
+ { url = "https://files.pythonhosted.org/packages/64/0e/b663ecc96ca57b5c91b83b6615d6b174380b0faf30338125c26e053d6aa7/pyside6_essentials-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:63311bd48e32c584599ab04b9ef7c324082374cd2c9fa533f978fb893bb47e40", size = 77549267, upload-time = "2026-05-13T09:43:44.92Z" },
95
+ { url = "https://files.pythonhosted.org/packages/f1/12/eb6723faf5cb7fa581145da1c15f40d641b96e080f0491af2f1859fdeedb/pyside6_essentials-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:11253ea52aabecefe9febddbbe78b43a824129e3af1cec98431028fba7fa954f", size = 57964512, upload-time = "2026-05-13T09:43:52.968Z" },
96
+ ]
97
+
98
+ [[package]]
99
+ name = "pytest"
100
+ version = "9.1.1"
101
+ source = { registry = "https://pypi.org/simple" }
102
+ dependencies = [
103
+ { name = "colorama", marker = "sys_platform == 'win32'" },
104
+ { name = "iniconfig" },
105
+ { name = "packaging" },
106
+ { name = "pluggy" },
107
+ { name = "pygments" },
108
+ ]
109
+ sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
110
+ wheels = [
111
+ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
112
+ ]
113
+
114
+ [[package]]
115
+ name = "remotedesktop"
116
+ source = { editable = "." }
117
+ dependencies = [
118
+ { name = "pyside6" },
119
+ ]
120
+
121
+ [package.dev-dependencies]
122
+ dev = [
123
+ { name = "pytest" },
124
+ ]
125
+
126
+ [package.metadata]
127
+ requires-dist = [{ name = "pyside6", specifier = ">=6.11.1" }]
128
+
129
+ [package.metadata.requires-dev]
130
+ dev = [{ name = "pytest", specifier = ">=8" }]
131
+
132
+ [[package]]
133
+ name = "shiboken6"
134
+ version = "6.11.1"
135
+ source = { registry = "https://pypi.org/simple" }
136
+ wheels = [
137
+ { url = "https://files.pythonhosted.org/packages/17/f3/f2b63df0251e7cd3172ea28e32ede52739de9566bcefcd0178681538ac81/shiboken6-6.11.1-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:1a16867f103ef1c662a5f09dfed03273a9f81688b174555162c58e83650a3f02", size = 476874, upload-time = "2026-05-13T09:47:01.091Z" },
138
+ { url = "https://files.pythonhosted.org/packages/c7/9b/e0355d8897b5c150770f1d95718aad17d432fcc9c035c04f3f58427d4693/shiboken6-6.11.1-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9a8bccfafc8805254cabcfa1edfaf55cd52889f4998c91ad0d9a4433fb1bcdbe", size = 272222, upload-time = "2026-05-13T09:47:02.653Z" },
139
+ { url = "https://files.pythonhosted.org/packages/57/d5/dd4f1defed400be03340f2ede34b61f846776650b4e7ed9ebaf4c71979a2/shiboken6-6.11.1-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:1bd2f4314414df2d122d9f646e03b731bc6d6b5f77a5f53f99a4fe4e97d84e6f", size = 270350, upload-time = "2026-05-13T09:47:04.02Z" },
140
+ { url = "https://files.pythonhosted.org/packages/52/b5/3f6fb2ee65b534193fb4ef713dd619dc31dadff5d12c16979a7699ad58be/shiboken6-6.11.1-cp310-abi3-win_amd64.whl", hash = "sha256:c2c6863aa80ec18c0f82cea3417837b279cdc60024ac17123461dc9042577df7", size = 1223647, upload-time = "2026-05-13T09:47:05.924Z" },
141
+ { url = "https://files.pythonhosted.org/packages/98/d1/f15ca0e1666faae02c945f48e745ea35f8fcd8243b176109b4e2c4251f47/shiboken6-6.11.1-cp310-abi3-win_arm64.whl", hash = "sha256:7c8d9af17db4495d4fa5b1c393f218311c4855546b9dfa6a0bd21bcd66b55e9d", size = 1784170, upload-time = "2026-05-13T09:47:07.617Z" },
142
+ ]