meshcore 2.1.13__py3-none-any.whl → 2.1.14__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.
Potentially problematic release.
This version of meshcore might be problematic. Click here for more details.
- meshcore/commands/.contact.py.swp +0 -0
- meshcore/commands/contact.py +60 -20
- {meshcore-2.1.13.dist-info → meshcore-2.1.14.dist-info}/METADATA +1 -1
- {meshcore-2.1.13.dist-info → meshcore-2.1.14.dist-info}/RECORD +6 -5
- {meshcore-2.1.13.dist-info → meshcore-2.1.14.dist-info}/WHEEL +0 -0
- {meshcore-2.1.13.dist-info → meshcore-2.1.14.dist-info}/licenses/LICENSE +0 -0
|
Binary file
|
meshcore/commands/contact.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import asyncio
|
|
2
3
|
from typing import Optional
|
|
3
4
|
|
|
4
|
-
from ..events import Event, EventType
|
|
5
|
+
from ..events import Event, EventDispatcher, EventType
|
|
5
6
|
from .base import CommandHandlerBase, DestinationType, _validate_destination
|
|
6
7
|
|
|
7
8
|
logger = logging.getLogger("meshcore")
|
|
@@ -17,26 +18,65 @@ class ContactCommands(CommandHandlerBase):
|
|
|
17
18
|
print("Fetching contacts ", end="", flush=True)
|
|
18
19
|
# wait first event
|
|
19
20
|
res = await self.send(data)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
timeout = 5
|
|
22
|
+
# Inline wait for events to continue waiting for CONTACTS event
|
|
23
|
+
# while receiving NEXT_CONTACTs (or it might be missed over serial)
|
|
24
|
+
try:
|
|
25
|
+
# Create futures for all expected events
|
|
26
|
+
futures = []
|
|
27
|
+
for event_type in [EventType.ERROR, EventType.NEXT_CONTACT, EventType.CONTACTS] :
|
|
28
|
+
future = asyncio.create_task(
|
|
29
|
+
self.dispatcher.wait_for_event(event_type, {}, timeout)
|
|
30
|
+
)
|
|
31
|
+
futures.append(future)
|
|
32
|
+
|
|
33
|
+
while True:
|
|
34
|
+
|
|
35
|
+
# Wait for the first event to complete or all to timeout
|
|
36
|
+
done, pending = await asyncio.wait(
|
|
37
|
+
futures, timeout=timeout, return_when=asyncio.FIRST_COMPLETED
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# Check if any future completed successfully
|
|
41
|
+
if len(done) == 0:
|
|
27
42
|
print(" Timeout")
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
for future in pending: # cancel all futures
|
|
44
|
+
future.cancel()
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
for future in done:
|
|
48
|
+
event = await future
|
|
49
|
+
|
|
50
|
+
if event:
|
|
51
|
+
if event.type == EventType.NEXT_CONTACT:
|
|
52
|
+
if anim:
|
|
53
|
+
print(".", end="", flush=True)
|
|
54
|
+
else: # Done or Error ... cancel pending and return
|
|
55
|
+
if anim:
|
|
56
|
+
print(" Done" if event.type == EventType.CONTACTS else " Error")
|
|
57
|
+
for future in pending:
|
|
58
|
+
future.cancel()
|
|
59
|
+
return event
|
|
60
|
+
|
|
61
|
+
futures = []
|
|
62
|
+
for future in pending: # put back pending
|
|
63
|
+
futures.append(future)
|
|
64
|
+
|
|
65
|
+
future = asyncio.create_task( # and recreate NEXT_CONTACT
|
|
66
|
+
self.dispatcher.wait_for_event(EventType.NEXT_CONTACT, {}, timeout)
|
|
67
|
+
)
|
|
68
|
+
futures.append(future)
|
|
69
|
+
|
|
70
|
+
except asyncio.TimeoutError:
|
|
71
|
+
logger.debug(f"Timeout receiving contacts")
|
|
72
|
+
if anim:
|
|
73
|
+
print(" Timeout")
|
|
74
|
+
return None
|
|
75
|
+
except Exception as e:
|
|
76
|
+
logger.debug(f"Command error: {e}")
|
|
77
|
+
if anim:
|
|
78
|
+
print(" Error")
|
|
79
|
+
return Event(EventType.ERROR, {"error": str(e)})
|
|
40
80
|
|
|
41
81
|
async def reset_path(self, key: DestinationType) -> Event:
|
|
42
82
|
key_bytes = _validate_destination(key, prefix_length=32)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshcore
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.14
|
|
4
4
|
Summary: Base classes for communicating with meshcore companion radios
|
|
5
5
|
Project-URL: Homepage, https://github.com/fdlamotte/meshcore_py
|
|
6
6
|
Project-URL: Issues, https://github.com/fdlamotte/meshcore_py/issues
|
|
@@ -9,13 +9,14 @@ meshcore/parsing.py,sha256=48PQkig-sqvsRlkF9zkvWhJoSq6ERCbGb_aRuCND5NI,4044
|
|
|
9
9
|
meshcore/reader.py,sha256=mIewSrfsgt-qe-acoxGQncHZhEhRr_3CEZuN1afnr7E,24784
|
|
10
10
|
meshcore/serial_cx.py,sha256=-kaqnqk7Ydufu2DECFfPDv4Xs-7gHUBuz8v0xf8fvvE,3969
|
|
11
11
|
meshcore/tcp_cx.py,sha256=05YRVMnjY5aVBTJcHa0uG4VfFKGbV6hQ1pPIsJg4CDI,4227
|
|
12
|
+
meshcore/commands/.contact.py.swp,sha256=ukLHeYjDX9dKOGMyuN3BNJCFrTvgD5y1X0vj1Lp0j5U,24576
|
|
12
13
|
meshcore/commands/__init__.py,sha256=NNmkTEcL-DLyuwKLUagEzpqe3C6ui2tETbu_mUd4p-I,441
|
|
13
14
|
meshcore/commands/base.py,sha256=0bDHcNGlKoej03xJqzo_wL5ctoPQU5kcK1Ca5sZh1pk,7097
|
|
14
15
|
meshcore/commands/binary.py,sha256=MVKXrT4pFSlzFkVFLBX988Eh57tRwunw4XPKBumbQNU,4890
|
|
15
|
-
meshcore/commands/contact.py,sha256=
|
|
16
|
+
meshcore/commands/contact.py,sha256=fmOW3CrDZFuvDHhqP7WpZT_vps7PK9LUvra2CYm0El8,6273
|
|
16
17
|
meshcore/commands/device.py,sha256=vstyy1crvhGbDgCAtyCWyjj3X8F2CpMw1LFTOwoHh6M,8273
|
|
17
18
|
meshcore/commands/messaging.py,sha256=MIVGM5G8J16qimKjCHdrlEiVJ4g_MsBaZKPvRJHJcLU,8306
|
|
18
|
-
meshcore-2.1.
|
|
19
|
-
meshcore-2.1.
|
|
20
|
-
meshcore-2.1.
|
|
21
|
-
meshcore-2.1.
|
|
19
|
+
meshcore-2.1.14.dist-info/METADATA,sha256=e_MjaWO0VyG1-ZTsL-hj8vWfvm6gIzUIVu42dhPHOAc,25317
|
|
20
|
+
meshcore-2.1.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
21
|
+
meshcore-2.1.14.dist-info/licenses/LICENSE,sha256=o62-JWT_C-ZqEtzb1Gl_PPtPr0pVT8KDmgji_Y_bejI,1075
|
|
22
|
+
meshcore-2.1.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|