outleap 0.7.4__py3-none-any.whl → 0.8.0__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.
outleap/api_wrappers.py CHANGED
@@ -135,10 +135,10 @@ class LLWindowAPI(LEAPAPIWrapper):
135
135
  keysym: KEYSYM_TYPE = None,
136
136
  char: CHAR_TYPE = None,
137
137
  path: UI_PATH_TYPE = None,
138
- ) -> None:
138
+ ) -> Optional[asyncio.Future]:
139
139
  """Simulate a key being pressed down"""
140
140
  payload = self._convert_key_payload(keysym=keysym, keycode=keycode, char=char, mask=mask, path=path)
141
- self._client.void_command(self._pump_name, "keyDown", payload)
141
+ return self._client.command(self._pump_name, "keyDown", payload)
142
142
 
143
143
  def key_up(
144
144
  self,
@@ -149,12 +149,12 @@ class LLWindowAPI(LEAPAPIWrapper):
149
149
  keysym: KEYSYM_TYPE = None,
150
150
  char: CHAR_TYPE = None,
151
151
  path: UI_PATH_TYPE = None,
152
- ) -> None:
152
+ ) -> Optional[asyncio.Future]:
153
153
  """Simulate a key being released"""
154
154
  payload = self._convert_key_payload(keysym=keysym, keycode=keycode, char=char, mask=mask, path=path)
155
- self._client.void_command(self._pump_name, "keyUp", payload)
155
+ return self._client.command(self._pump_name, "keyUp", payload)
156
156
 
157
- def key_press(
157
+ async def key_press(
158
158
  self,
159
159
  /,
160
160
  *,
@@ -165,15 +165,15 @@ class LLWindowAPI(LEAPAPIWrapper):
165
165
  path: UI_PATH_TYPE = None,
166
166
  ) -> None:
167
167
  """Simulate a key being pressed down and immediately released"""
168
- self.key_down(mask=mask, keycode=keycode, keysym=keysym, char=char, path=path)
169
- self.key_up(mask=mask, keycode=keycode, keysym=keysym, char=char, path=path)
168
+ await self.key_down(mask=mask, keycode=keycode, keysym=keysym, char=char, path=path)
169
+ await self.key_up(mask=mask, keycode=keycode, keysym=keysym, char=char, path=path)
170
170
 
171
- def text_input(self, text_input: str, path: UI_PATH_TYPE = None) -> None:
171
+ async def text_input(self, text_input: str, path: UI_PATH_TYPE = None) -> None:
172
172
  """Simulate a user typing a string of text"""
173
173
  # TODO: Uhhhhh I can't see how the key* APIs could possibly handle i18n correctly,
174
174
  # what with all the U8s. Maybe I'm just dumb?
175
175
  for char in text_input:
176
- self.key_press(char=char, path=path)
176
+ await self.key_press(char=char, path=path)
177
177
 
178
178
  async def get_paths(self, under: Optional[UI_PATH_TYPE] = None) -> List[UIPath]:
179
179
  """Get all UI paths under the root, or under a path if specified"""
@@ -9,21 +9,17 @@ import tempfile
9
9
  import weakref
10
10
  from typing import *
11
11
 
12
- import pkg_resources
13
12
  from PySide6 import QtCore, QtGui, QtWidgets
14
13
  from qasync import QEventLoop, asyncSlot
15
14
 
16
15
  import outleap
17
16
  from outleap import LEAPClient, UIElement, UIPath
18
17
  from outleap.qt_helpers import GUIInteractionManager, loadUi
18
+ from outleap.utils import get_resource_filename
19
19
 
20
20
  LOG = logging.getLogger(__name__)
21
21
 
22
22
 
23
- def get_resource_filename(resource_filename: str):
24
- return pkg_resources.resource_filename("outleap", resource_filename)
25
-
26
-
27
23
  class ElemTreeHeader(enum.IntEnum):
28
24
  Name = 0
29
25
 
outleap/scripts/repl.py CHANGED
@@ -5,6 +5,7 @@ Interactive REPL that handles connect-back connections from outleap-agent
5
5
  import asyncio
6
6
  import logging
7
7
  import multiprocessing
8
+ import platform
8
9
  import pprint
9
10
  import sys
10
11
  import uuid
@@ -18,6 +19,20 @@ except ImportError:
18
19
  import outleap
19
20
 
20
21
 
22
+ def _patch_loop_factory_for_ptpython() -> None:
23
+ # This patch can be removed when https://github.com/prompt-toolkit/ptpython/issues/582 is fixed
24
+ from asyncio import get_event_loop_policy
25
+
26
+ policy = get_event_loop_policy()
27
+ if loop_factory := getattr(policy, "_loop_factory", None):
28
+ for attr in ("add_signal_handler", "remove_signal_handler"):
29
+ setattr(loop_factory, attr, lambda *args, **kwargs: None)
30
+
31
+
32
+ if platform.system() == "Windows":
33
+ _patch_loop_factory_for_ptpython()
34
+
35
+
21
36
  class REPLServer:
22
37
  def __init__(self):
23
38
  self._repl_running = False
outleap/utils.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ import importlib.resources
2
3
  import io
3
4
  import os
4
5
  import stat
@@ -168,6 +169,11 @@ async def connect_stdin_stdout() -> Tuple[asyncio.StreamReader, asyncio.StreamWr
168
169
  return reader, writer
169
170
 
170
171
 
172
+ def get_resource_filename(resource_filename: str) -> str:
173
+ return str(importlib.resources.files("outleap").joinpath(resource_filename))
174
+
175
+
171
176
  __all__ = [
172
177
  "connect_stdin_stdout",
178
+ "get_resource_filename",
173
179
  ]
outleap/version.py CHANGED
@@ -5,7 +5,7 @@ from collections import namedtuple
5
5
  #: A namedtuple of the version info for the current release.
6
6
  _version_info = namedtuple("_version_info", "major minor micro status")
7
7
 
8
- parts = "0.7.4".split(".", 3)
8
+ parts = "0.8.0".split(".", 3)
9
9
  version_info = _version_info(
10
10
  int(parts[0]),
11
11
  int(parts[1]),
@@ -16,4 +16,4 @@ version_info = _version_info(
16
16
  # Remove everything but the 'version_info' from this module.
17
17
  del namedtuple, _version_info, parts
18
18
 
19
- __version__ = "0.7.4"
19
+ __version__ = "0.8.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: outleap
3
- Version: 0.7.4
3
+ Version: 0.8.0
4
4
  Summary: Tools for using asyncio to control a Second Life viewer over the LEAP protocol
5
5
  Author-email: Salad Dais <83434023+SaladDais@users.noreply.github.com>
6
6
  License: MIT License
@@ -1,20 +1,20 @@
1
1
  outleap/__init__.py,sha256=h0VTP95rggZ-iFH1Ke4rh85fiU3BTvfj_jkLW27Ln1k,689
2
- outleap/api_wrappers.py,sha256=i8Bpz3AMM7Ghose9Wi0MbYDJzlzVqYwICQFwhaFYfyM,27144
2
+ outleap/api_wrappers.py,sha256=bPstVWCGFlZPq8DznaCSsyhPIoSAAWnnlxMfxt0Ezro,27218
3
3
  outleap/bridge.py,sha256=Q5tku2JP-K0wT9zVA8OyJpFEpumgbUgHaC1YeRQR8vE,1016
4
4
  outleap/client.py,sha256=4RFTOSiL2cCwpJ64_sux_DbFh_LjnwjVIlByutGg-ao,14545
5
5
  outleap/protocol.py,sha256=HeCnlzszGp6Yxgq__34KYYuii6tpxnfUi5La9SFxw0k,3725
6
6
  outleap/qt_helpers.py,sha256=qpdEx7y60T3nAJ4GFDvpcefKEgpgBBnt8dQ-c2IB-Zc,7766
7
7
  outleap/ui_elems.py,sha256=ndi3FDp_fu1rVD3rNpFp6hs8eU53U4D_dCtuwFmums0,11577
8
- outleap/utils.py,sha256=uRoP_A_dcwhlpaDPOQETzFLfQ_fDS3KQfrwwew-nSyI,5902
9
- outleap/version.py,sha256=z-OiZ8ucVeMwy9kQAgq-Lhk5XgdpaudwMxZ-rbvxXx4,517
8
+ outleap/utils.py,sha256=lEiWZFMmoyA8hWzWgFm-4mWma7emtCazUXa1Vre-mVY,6099
9
+ outleap/version.py,sha256=T0XmoV7bjKVi-TfDCWHQyGURssWDkbZxhzAnqZC-HEM,517
10
10
  outleap/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  outleap/scripts/agent.py,sha256=YOXtkjqZY7ju9fLhBHRzdhsp9TdhPnDzsXiQo5-Dhfs,1984
12
- outleap/scripts/inspector.py,sha256=h_2So4ohXlE4qOcYzfFRFiKdMItXmPFnVh50KwfoXmM,10950
13
- outleap/scripts/repl.py,sha256=z20hpXY5_O68U2WX1Il5tRGRyafsKHa-FNeF9CoJpZk,1721
12
+ outleap/scripts/inspector.py,sha256=ZjLPbJxOFjEwm9m6NDj3_KOIuoqGU10eGDP3ymzStSM,10851
13
+ outleap/scripts/repl.py,sha256=ug133SnSoaOa7qyhfnVbL6xEZIaJV9y-Rvu5cmVCUD8,2249
14
14
  outleap/scripts/ui/inspector.ui,sha256=CY-Tczsrpmc2groE6_7s_fIc7de6Oy2TuU2a4ZGzl7o,7269
15
- outleap-0.7.4.dist-info/licenses/COPYING,sha256=OPIPYHZUdL5ylRYaujIVg05CSvX4-AHW15qBGYz_fyY,1093
16
- outleap-0.7.4.dist-info/METADATA,sha256=wz7kZbaHJ2gTPSFBjH_Dwg-72HpfO-JB9_HAGQJsCbY,4819
17
- outleap-0.7.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
18
- outleap-0.7.4.dist-info/entry_points.txt,sha256=gi7UECBDlCTzn0jUU8xPvyMm_8lOQMZUJuNOe266I48,174
19
- outleap-0.7.4.dist-info/top_level.txt,sha256=dIQJmMy2IulmIzvBWuz8dup0dm9MV0b4p_hCtBRewfE,8
20
- outleap-0.7.4.dist-info/RECORD,,
15
+ outleap-0.8.0.dist-info/licenses/COPYING,sha256=OPIPYHZUdL5ylRYaujIVg05CSvX4-AHW15qBGYz_fyY,1093
16
+ outleap-0.8.0.dist-info/METADATA,sha256=4_nY2kpd4raSjXcvXbDMtW5o6MtPy5fV3JB5hfMPTEg,4819
17
+ outleap-0.8.0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
18
+ outleap-0.8.0.dist-info/entry_points.txt,sha256=gi7UECBDlCTzn0jUU8xPvyMm_8lOQMZUJuNOe266I48,174
19
+ outleap-0.8.0.dist-info/top_level.txt,sha256=dIQJmMy2IulmIzvBWuz8dup0dm9MV0b4p_hCtBRewfE,8
20
+ outleap-0.8.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5