outleap 0.6.0__tar.gz → 0.6.2__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.
- {outleap-0.6.0 → outleap-0.6.2}/PKG-INFO +1 -1
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/api_wrappers.py +101 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/scripts/agent.py +6 -1
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/scripts/inspector.py +1 -2
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/scripts/repl.py +1 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/version.py +2 -2
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap.egg-info/PKG-INFO +1 -1
- {outleap-0.6.0 → outleap-0.6.2}/.coveragerc +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/.github/workflows/cis.yml +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/.github/workflows/pypi_publish.yml +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/.gitignore +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/COPYING +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/MANIFEST.in +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/README.md +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/codecov.yml +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/examples/README.md +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/examples/complex_leap_script.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/examples/simple_leap_script.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/pyproject.toml +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/setup.cfg +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/setup.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/__init__.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/bridge.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/client.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/protocol.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/qt_helpers.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/scripts/__init__.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/scripts/ui/inspector.ui +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/ui_elems.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap/utils.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap.egg-info/SOURCES.txt +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap.egg-info/dependency_links.txt +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap.egg-info/entry_points.txt +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap.egg-info/requires.txt +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/src/outleap.egg-info/top_level.txt +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/static/inspector_screenshot.png +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/__init__.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/test_client.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/test_protocol.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/test_stdio.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/test_ui_elems.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/test_wrappers.py +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tests/ui_paths.txt +0 -0
- {outleap-0.6.0 → outleap-0.6.2}/tox.ini +0 -0
|
@@ -466,6 +466,101 @@ class LLFloaterRegAPI(LEAPAPIWrapper):
|
|
|
466
466
|
)
|
|
467
467
|
|
|
468
468
|
|
|
469
|
+
class LLURLDispatcher(LEAPAPIWrapper):
|
|
470
|
+
PUMP_NAME = "LLUrlDispatcher"
|
|
471
|
+
|
|
472
|
+
def dispatch(self, url: str, trusted: bool = True):
|
|
473
|
+
"""At startup time or on clicks in internal web browsers, teleport, open map, or run requested command."""
|
|
474
|
+
self._client.void_command(self._pump_name, "dispatch", {"url": url, "trusted": trusted})
|
|
475
|
+
|
|
476
|
+
def dispatch_right_click(self, url: str):
|
|
477
|
+
"""Dispatch ["url"] as if from a right-click on a hot link."""
|
|
478
|
+
self._client.void_command(self._pump_name, "dispatchRightClick", {"url": url})
|
|
479
|
+
|
|
480
|
+
def dispatch_from_text_editor(self, url: str):
|
|
481
|
+
"""Dispatch ["url"] as if from an edit field"""
|
|
482
|
+
self._client.void_command(self._pump_name, "dispatchFromTextEditor", {"url": url})
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
class LLFloaterAbout(LEAPAPIWrapper):
|
|
486
|
+
PUMP_NAME = "LLFloaterAbout"
|
|
487
|
+
|
|
488
|
+
def get_info(self) -> Awaitable[dict]:
|
|
489
|
+
"""Request an LLSD::Map containing information used to populate About box"""
|
|
490
|
+
return self._client.command(self._pump_name, "getInfo")
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
class LLGesture(LEAPAPIWrapper):
|
|
494
|
+
PUMP_NAME = "LLGesture"
|
|
495
|
+
|
|
496
|
+
def get_active_gestures(self) -> Awaitable[list]:
|
|
497
|
+
"""
|
|
498
|
+
Return information about the agent's available gestures
|
|
499
|
+
|
|
500
|
+
Returns a list of dicts with the following dict values for each entry:
|
|
501
|
+
["name"]: name of the gesture, may be empty
|
|
502
|
+
["trigger"]: trigger string used to invoke via user chat, may be empty
|
|
503
|
+
["playing"]: true or false indicating the playing state
|
|
504
|
+
"""
|
|
505
|
+
fut = self._client.command(self._pump_name, "getActiveGestures")
|
|
506
|
+
return _data_unwrapper(fut, "gestures")
|
|
507
|
+
|
|
508
|
+
def is_gesture_playing(self, gesture_id: uuid.UUID) -> Awaitable[bool]:
|
|
509
|
+
fut = self._client.command(self._pump_name, "isGesturePlaying", {"id": gesture_id})
|
|
510
|
+
return _data_unwrapper(fut, "playing")
|
|
511
|
+
|
|
512
|
+
def start_gesture(self, gesture_id: uuid):
|
|
513
|
+
self._client.void_command(self._pump_name, "startGesture", {"id": gesture_id})
|
|
514
|
+
|
|
515
|
+
def stop_gesture(self, gesture_id: uuid):
|
|
516
|
+
self._client.void_command(self._pump_name, "stopGesture", {"id": gesture_id})
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
class GroupChat(LEAPAPIWrapper):
|
|
520
|
+
PUMP_NAME = "GroupChat"
|
|
521
|
+
|
|
522
|
+
def start_im(self, group_id: uuid.UUID) -> Awaitable[uuid.UUID]:
|
|
523
|
+
"""Start an IM session for the specified group, returning the session ID"""
|
|
524
|
+
fut = self._client.command(self._pump_name, "startIM", {"id": group_id})
|
|
525
|
+
return _data_unwrapper(fut, "session_id")
|
|
526
|
+
|
|
527
|
+
def end_im(self, group_id: uuid.UUID):
|
|
528
|
+
"""End an IM session with the specified group"""
|
|
529
|
+
self._client.void_command(self._pump_name, "endIM", {"id": group_id})
|
|
530
|
+
|
|
531
|
+
def send_im(self, group_id: uuid.UUID, session_id: uuid.UUID, text: str):
|
|
532
|
+
"""Send an IM to the specified group with the specified chatterbox session ID"""
|
|
533
|
+
self._client.void_command(
|
|
534
|
+
self._pump_name, "sendIM", {"id": group_id, "session_id": session_id, "text": text}
|
|
535
|
+
)
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
class LLFloaterIMNearbyChat(LEAPAPIWrapper):
|
|
539
|
+
PUMP_NAME = "LLChatBar"
|
|
540
|
+
|
|
541
|
+
def send_chat(self, message: str, channel: int = 0, chat_type: str = "normal"):
|
|
542
|
+
"""
|
|
543
|
+
Send chat to the simulator
|
|
544
|
+
|
|
545
|
+
:param message: chat message text [required]
|
|
546
|
+
:param channel: chat channel number [default = 0]
|
|
547
|
+
:param chat_type: "whisper", "normal", "shout" [default = "normal"]
|
|
548
|
+
"""
|
|
549
|
+
self._client.void_command(
|
|
550
|
+
self._pump_name, "sendChat", {"message": message, "channel": channel, "chat_type": chat_type}
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
class LLAppViewer(LEAPAPIWrapper):
|
|
555
|
+
PUMP_NAME = "LLAppViewer"
|
|
556
|
+
|
|
557
|
+
def request_quit(self):
|
|
558
|
+
self._client.void_command(self._pump_name, "requestQuit")
|
|
559
|
+
|
|
560
|
+
def force_quit(self):
|
|
561
|
+
self._client.void_command(self._pump_name, "forceQuit")
|
|
562
|
+
|
|
563
|
+
|
|
469
564
|
class LLPuppetryAPI(LEAPAPIWrapper):
|
|
470
565
|
PUMP_NAME = "puppetry"
|
|
471
566
|
OP_KEY: str = "command"
|
|
@@ -511,6 +606,12 @@ __all__ = [
|
|
|
511
606
|
"LLViewerWindowAPI",
|
|
512
607
|
"LLCommandDispatcherAPI",
|
|
513
608
|
"LLFloaterRegAPI",
|
|
609
|
+
"LLURLDispatcher",
|
|
610
|
+
"LLFloaterAbout",
|
|
611
|
+
"LLGesture",
|
|
612
|
+
"GroupChat",
|
|
613
|
+
"LLFloaterIMNearbyChat",
|
|
614
|
+
"LLAppViewer",
|
|
514
615
|
"LLPuppetryAPI",
|
|
515
616
|
"LEAPAPIWrapper",
|
|
516
617
|
]
|
|
@@ -7,6 +7,7 @@ Hint: uncomment https://vcs.firestormviewer.org/phoenix-firestorm/files/cf85e854
|
|
|
7
7
|
Usage: While an outleap TCP receiver is running
|
|
8
8
|
./firestorm --leap outleap-agent
|
|
9
9
|
"""
|
|
10
|
+
|
|
10
11
|
import asyncio
|
|
11
12
|
import multiprocessing
|
|
12
13
|
import os
|
|
@@ -47,6 +48,10 @@ async def amain():
|
|
|
47
48
|
pass
|
|
48
49
|
|
|
49
50
|
|
|
51
|
+
def agent_main():
|
|
52
|
+
asyncio.run(amain())
|
|
53
|
+
|
|
54
|
+
|
|
50
55
|
if __name__ == "__main__":
|
|
51
56
|
multiprocessing.freeze_support()
|
|
52
|
-
|
|
57
|
+
agent_main()
|
|
@@ -285,8 +285,7 @@ def inspector_main():
|
|
|
285
285
|
print(
|
|
286
286
|
"Running in direct LEAP execution mode.\n"
|
|
287
287
|
"If you're seeing this anywhere other than the viewer logs, "
|
|
288
|
-
"you probably messed up, the viewer should be executing this!\n"
|
|
289
|
-
"Try adding a '--tcp' argument!",
|
|
288
|
+
"you probably messed up, the viewer should be executing this!\n",
|
|
290
289
|
file=sys.stderr,
|
|
291
290
|
)
|
|
292
291
|
|
|
@@ -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.6.
|
|
8
|
+
parts = "0.6.2".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.6.
|
|
19
|
+
__version__ = "0.6.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|