wslink 2.3.0__tar.gz → 2.3.2__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {wslink-2.3.0 → wslink-2.3.2}/PKG-INFO +1 -1
- {wslink-2.3.0 → wslink-2.3.2}/setup.cfg +1 -1
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/emitter.py +35 -14
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/websocket.py +3 -6
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink.egg-info/PKG-INFO +1 -1
- {wslink-2.3.0 → wslink-2.3.2}/MANIFEST.in +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/README.rst +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/setup.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/LICENSE +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/__init__.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/__init__.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/aiohttp/__init__.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/aiohttp/launcher.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/aiohttp/relay.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/generic/__init__.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/generic/core.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/jupyter/__init__.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/jupyter/core.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/tornado/__init__.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/backends/tornado/core.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/chunking.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/launcher.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/protocol.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/publish.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/relay.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/server.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/ssl_context.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink/uri.py +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink.egg-info/SOURCES.txt +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink.egg-info/dependency_links.txt +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink.egg-info/requires.txt +0 -0
- {wslink-2.3.0 → wslink-2.3.2}/src/wslink.egg-info/top_level.txt +0 -0
@@ -1,26 +1,28 @@
|
|
1
|
-
from typing import TypeVar, Generic, LiteralString
|
2
|
-
|
3
1
|
import asyncio
|
4
2
|
import functools
|
5
3
|
|
6
4
|
|
7
|
-
|
5
|
+
class EventEmitter:
|
6
|
+
def __init__(self, allowed_events=None):
|
7
|
+
self._listeners = {}
|
8
8
|
|
9
|
+
if allowed_events is None:
|
10
|
+
allowed_events = []
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
self.
|
12
|
+
self._allowed_events = set(allowed_events)
|
13
|
+
|
14
|
+
for event in self._allowed_events:
|
15
|
+
setattr(self, event, functools.partial(self.emit, event))
|
13
16
|
|
14
17
|
def clear(self):
|
15
18
|
self._listeners = {}
|
16
19
|
|
17
|
-
def __call__(self, event
|
20
|
+
def __call__(self, event, *args, **kwargs):
|
18
21
|
self.emit(event, *args, **kwargs)
|
19
22
|
|
20
|
-
def
|
21
|
-
|
23
|
+
def emit(self, event, *args, **kwargs):
|
24
|
+
self._validate_event(event)
|
22
25
|
|
23
|
-
def emit(self, event: T, *args, **kwargs):
|
24
26
|
listeners = self._listeners.get(event)
|
25
27
|
if listeners is None:
|
26
28
|
return
|
@@ -36,7 +38,9 @@ class EventEmitter(Generic[T]):
|
|
36
38
|
else:
|
37
39
|
listener(*args, **kwargs)
|
38
40
|
|
39
|
-
def add_event_listener(self, event
|
41
|
+
def add_event_listener(self, event, listener):
|
42
|
+
self._validate_event(event)
|
43
|
+
|
40
44
|
listeners = self._listeners.get(event)
|
41
45
|
if listeners is None:
|
42
46
|
listeners = set()
|
@@ -44,7 +48,9 @@ class EventEmitter(Generic[T]):
|
|
44
48
|
|
45
49
|
listeners.add(listener)
|
46
50
|
|
47
|
-
def remove_event_listener(self, event
|
51
|
+
def remove_event_listener(self, event, listener):
|
52
|
+
self._validate_event(event)
|
53
|
+
|
48
54
|
listeners = self._listeners.get(event)
|
49
55
|
if listeners is None:
|
50
56
|
return
|
@@ -52,12 +58,27 @@ class EventEmitter(Generic[T]):
|
|
52
58
|
if listener in listeners:
|
53
59
|
listeners.remove(listener)
|
54
60
|
|
55
|
-
def has(self, event
|
61
|
+
def has(self, event):
|
56
62
|
return self.listeners_count(event) > 0
|
57
63
|
|
58
|
-
def listeners_count(self, event
|
64
|
+
def listeners_count(self, event):
|
65
|
+
self._validate_event(event)
|
66
|
+
|
59
67
|
listeners = self._listeners.get(event)
|
60
68
|
if listeners is None:
|
61
69
|
return 0
|
62
70
|
|
63
71
|
return len(listeners)
|
72
|
+
|
73
|
+
@property
|
74
|
+
def allowed_events(self):
|
75
|
+
return self._allowed_events
|
76
|
+
|
77
|
+
def _validate_event(self, event):
|
78
|
+
if len(self.allowed_events) == 0:
|
79
|
+
return
|
80
|
+
|
81
|
+
if event not in self.allowed_events:
|
82
|
+
raise ValueError(
|
83
|
+
f"'{event}' is not a known event of this EventEmitter: {self.allowed_events}"
|
84
|
+
)
|
@@ -6,8 +6,6 @@ ServerProtocol to hook all the needed LinkProtocols together.
|
|
6
6
|
|
7
7
|
import logging
|
8
8
|
import asyncio
|
9
|
-
from typing import Literal
|
10
|
-
from dataclasses import dataclass
|
11
9
|
|
12
10
|
from wslink import register as exportRpc
|
13
11
|
from wslink import schedule_callback
|
@@ -120,9 +118,6 @@ class NetworkMonitor:
|
|
120
118
|
await self.event.wait()
|
121
119
|
|
122
120
|
|
123
|
-
LogEmitterEvents = Literal["exception", "error", "critical", "info", "debug"]
|
124
|
-
|
125
|
-
|
126
121
|
class ServerProtocol(object):
|
127
122
|
"""
|
128
123
|
Defines the core server protocol for wslink. Gathers a list of LinkProtocol
|
@@ -131,7 +126,9 @@ class ServerProtocol(object):
|
|
131
126
|
|
132
127
|
def __init__(self):
|
133
128
|
self.network_monitor = NetworkMonitor()
|
134
|
-
self.log_emitter = EventEmitter
|
129
|
+
self.log_emitter = EventEmitter(
|
130
|
+
allowed_events=["exception", "error", "critical", "info", "debug"]
|
131
|
+
)
|
135
132
|
self.linkProtocols = []
|
136
133
|
self.secret = None
|
137
134
|
self.initialize()
|
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
|