replx 1.6.3__tar.gz → 1.6.4__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.
- {replx-1.6.3/replx.egg-info → replx-1.6.4}/PKG-INFO +1 -1
- {replx-1.6.3 → replx-1.6.4}/replx/__init__.py +1 -1
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/core.py +6 -8
- {replx-1.6.3 → replx-1.6.4/replx.egg-info}/PKG-INFO +1 -1
- {replx-1.6.3 → replx-1.6.4}/LICENSE +0 -0
- {replx-1.6.3 → replx-1.6.4}/README.md +0 -0
- {replx-1.6.3 → replx-1.6.4}/pyproject.toml +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/client/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/client/core.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/client/session.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/protocol.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/__main__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/command_dispatcher.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/connection_manager.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/handlers/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/handlers/exec.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/handlers/filesystem.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/handlers/repl.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/handlers/session.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/handlers/transfer.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/agent/server/session_manager.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/app.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/device.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/exec.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/file.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/firmware.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/package.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/commands/utility.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/config.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/connection.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/compiler.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/environment.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/output.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/registry.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/scanner.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/store.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/cli/helpers/updater.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/commands.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/protocol/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/protocol/repl.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/protocol/storage.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/terminal.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/transport/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/transport/base.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/transport/serial.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/_thread.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/aioble/__init__.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/array.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/asyncio/__init__.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/binascii.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/bluetooth.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/builtins.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/cmath.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/collections.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/cryptolib.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/deflate.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/errno.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/framebuf.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/gc.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/hashlib.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/heapq.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/io.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/json.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/lwip.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/machine.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/math.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/micropython.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/mip/__init__.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/network.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/ntptime.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/os.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/platform.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/random.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/re.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/requests/__init__.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/select.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/socket.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/ssl.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/struct.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/sys.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/time.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/tls.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/uasyncio.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/uctypes.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/urequests.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm/vfs.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/binascii.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/errno.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/hashlib.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/io.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/json.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/machine.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/math.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/micropython.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/network.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/os.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/select.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/socket.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/ssl.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/struct.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/sys.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/time.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/ubinascii.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/ucryptolib.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/uerrno.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/uhashlib.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/uio.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/ujson.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/umachine.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/uos.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/uselect.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/usocket.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/ussl.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/ustruct.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/comm_separate/EFR32MG/utime.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/core/ESP32/aioespnow.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/core/ESP32/esp.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/core/ESP32/esp32.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/core/ESP32/espnow.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/core/MIMXRT1062DVJ6A/mimxrt.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/typehints/core/RP2350/rp2.pyi +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/utils/__init__.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/utils/constants.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/utils/device_info.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx/utils/exceptions.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx.egg-info/SOURCES.txt +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx.egg-info/dependency_links.txt +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx.egg-info/entry_points.txt +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx.egg-info/requires.txt +0 -0
- {replx-1.6.3 → replx-1.6.4}/replx.egg-info/top_level.txt +0 -0
- {replx-1.6.3 → replx-1.6.4}/setup.cfg +0 -0
- {replx-1.6.3 → replx-1.6.4}/test/test_line_mode_terminal.py +0 -0
- {replx-1.6.3 → replx-1.6.4}/test/test_termio.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: replx
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.4
|
|
4
4
|
Summary: replx is a fast, modern MicroPython CLI: turbo REPL, robust file sync (put/get), project install, mpy-cross integration, and smart port discovery.
|
|
5
5
|
Author-email: "chanmin.park" <devcamp@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -121,6 +121,7 @@ class AgentServer(
|
|
|
121
121
|
self._loop: asyncio.AbstractEventLoop | None = None
|
|
122
122
|
self._stop_event: asyncio.Event | None = None
|
|
123
123
|
self._datagram_transport: asyncio.DatagramTransport | None = None
|
|
124
|
+
self._send_socket: Optional[socket.socket] = None
|
|
124
125
|
self._cleaned_up: bool = False
|
|
125
126
|
|
|
126
127
|
@property
|
|
@@ -321,6 +322,7 @@ class AgentServer(
|
|
|
321
322
|
local_addr=(AGENT_HOST, self.agent_port),
|
|
322
323
|
)
|
|
323
324
|
self._datagram_transport = transport
|
|
325
|
+
self._send_socket = transport.get_extra_info('socket')
|
|
324
326
|
self.running = True
|
|
325
327
|
print(f'replx agent started — listening on {AGENT_HOST}:{self.agent_port} (UDP)')
|
|
326
328
|
|
|
@@ -432,15 +434,11 @@ class AgentServer(
|
|
|
432
434
|
conn.stop_detached()
|
|
433
435
|
|
|
434
436
|
def _safe_send(self, data: bytes, addr: tuple) -> None:
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
"""
|
|
438
|
-
transport = self._datagram_transport
|
|
439
|
-
loop = self._loop
|
|
440
|
-
if not transport or transport.is_closing() or not loop:
|
|
437
|
+
sock = self._send_socket
|
|
438
|
+
if not sock:
|
|
441
439
|
return
|
|
442
440
|
try:
|
|
443
|
-
|
|
441
|
+
sock.sendto(data, addr)
|
|
444
442
|
except Exception:
|
|
445
443
|
pass
|
|
446
444
|
|
|
@@ -597,7 +595,6 @@ class AgentServer(
|
|
|
597
595
|
if not conn:
|
|
598
596
|
raise ValueError(f"Connection {target_port} not found")
|
|
599
597
|
|
|
600
|
-
# Disconnect handles stopping detached script and drain thread via stop_detached()
|
|
601
598
|
self.connection_manager.disconnect(target_port)
|
|
602
599
|
self.session_manager.remove_connection_from_all_sessions(target_port)
|
|
603
600
|
|
|
@@ -777,6 +774,7 @@ class AgentServer(
|
|
|
777
774
|
transport.close()
|
|
778
775
|
except Exception:
|
|
779
776
|
pass
|
|
777
|
+
self._send_socket = None
|
|
780
778
|
self._fast_executor.shutdown(wait=False, cancel_futures=True)
|
|
781
779
|
self._slow_executor.shutdown(wait=False, cancel_futures=True)
|
|
782
780
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: replx
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.4
|
|
4
4
|
Summary: replx is a fast, modern MicroPython CLI: turbo REPL, robust file sync (put/get), project install, mpy-cross integration, and smart port discovery.
|
|
5
5
|
Author-email: "chanmin.park" <devcamp@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
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
|
|
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
|
|
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
|
|
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
|