wslink 2.3.1__py3-none-any.whl → 2.3.3__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.
@@ -27,6 +27,19 @@ STATE_KEY = aiohttp_web.AppKey("state", str)
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
30
+ def reload_settings():
31
+ global MSG_OVERHEAD, MAX_MSG_SIZE, HEART_BEAT, HTTP_HEADERS
32
+
33
+ MSG_OVERHEAD = int(os.environ.get("WSLINK_MSG_OVERHEAD", 4096))
34
+ MAX_MSG_SIZE = int(os.environ.get("WSLINK_MAX_MSG_SIZE", 4194304))
35
+ HEART_BEAT = int(os.environ.get("WSLINK_HEART_BEAT", 30)) # 30 seconds
36
+ HTTP_HEADERS = os.environ.get("WSLINK_HTTP_HEADERS")
37
+
38
+ # Allow to skip heart beat
39
+ if HEART_BEAT < 1:
40
+ HEART_BEAT = None
41
+
42
+
30
43
  # -----------------------------------------------------------------------------
31
44
  # HTTP helpers
32
45
  # -----------------------------------------------------------------------------
@@ -57,6 +70,7 @@ async def http_headers(request: aiohttp_web.Request, handler):
57
70
  # -----------------------------------------------------------------------------
58
71
  class WebAppServer(AbstractWebApp):
59
72
  def __init__(self, server_config):
73
+ reload_settings()
60
74
  AbstractWebApp.__init__(self, server_config)
61
75
  if HTTP_HEADERS:
62
76
  self.set_app(aiohttp_web.Application(middlewares=[http_headers]))
@@ -167,6 +181,7 @@ class WebAppServer(AbstractWebApp):
167
181
 
168
182
  class ReverseWebAppServer(AbstractWebApp):
169
183
  def __init__(self, server_config):
184
+ reload_settings()
170
185
  super().__init__(server_config)
171
186
  self._url = server_config.get("reverse_url")
172
187
  self._server_protocol = server_config.get("ws_protocol")
wslink/emitter.py CHANGED
@@ -3,34 +3,26 @@ import functools
3
3
 
4
4
 
5
5
  class EventEmitter:
6
- def __init__(self):
6
+ def __init__(self, allowed_events=None):
7
7
  self._listeners = {}
8
8
 
9
+ if allowed_events is None:
10
+ allowed_events = []
11
+
12
+ self._allowed_events = set(allowed_events)
13
+
14
+ for event in self._allowed_events:
15
+ setattr(self, event, functools.partial(self.emit, event))
16
+
9
17
  def clear(self):
10
18
  self._listeners = {}
11
19
 
12
20
  def __call__(self, event, *args, **kwargs):
13
21
  self.emit(event, *args, **kwargs)
14
22
 
15
- def __getattr__(self, name):
16
- return functools.partial(self.emit, name)
17
-
18
- def exception(self, *args, **kwargs):
19
- self.emit("exception", *args, **kwargs)
20
-
21
- def error(self, *args, **kwargs):
22
- self.emit("error", *args, **kwargs)
23
-
24
- def critical(self, *args, **kwargs):
25
- self.emit("critical", *args, **kwargs)
26
-
27
- def info(self, *args, **kwargs):
28
- self.emit("info", *args, **kwargs)
29
-
30
- def debug(self, *args, **kwargs):
31
- self.emit("debug", *args, **kwargs)
32
-
33
23
  def emit(self, event, *args, **kwargs):
24
+ self._validate_event(event)
25
+
34
26
  listeners = self._listeners.get(event)
35
27
  if listeners is None:
36
28
  return
@@ -47,6 +39,8 @@ class EventEmitter:
47
39
  listener(*args, **kwargs)
48
40
 
49
41
  def add_event_listener(self, event, listener):
42
+ self._validate_event(event)
43
+
50
44
  listeners = self._listeners.get(event)
51
45
  if listeners is None:
52
46
  listeners = set()
@@ -55,6 +49,8 @@ class EventEmitter:
55
49
  listeners.add(listener)
56
50
 
57
51
  def remove_event_listener(self, event, listener):
52
+ self._validate_event(event)
53
+
58
54
  listeners = self._listeners.get(event)
59
55
  if listeners is None:
60
56
  return
@@ -66,8 +62,23 @@ class EventEmitter:
66
62
  return self.listeners_count(event) > 0
67
63
 
68
64
  def listeners_count(self, event):
65
+ self._validate_event(event)
66
+
69
67
  listeners = self._listeners.get(event)
70
68
  if listeners is None:
71
69
  return 0
72
70
 
73
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
+ )
wslink/websocket.py CHANGED
@@ -126,7 +126,9 @@ class ServerProtocol(object):
126
126
 
127
127
  def __init__(self):
128
128
  self.network_monitor = NetworkMonitor()
129
- self.log_emitter = EventEmitter()
129
+ self.log_emitter = EventEmitter(
130
+ allowed_events=["exception", "error", "critical", "info", "debug"]
131
+ )
130
132
  self.linkProtocols = []
131
133
  self.secret = None
132
134
  self.initialize()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wslink
3
- Version: 2.3.1
3
+ Version: 2.3.3
4
4
  Summary: Python/JavaScript library for communicating over WebSocket
5
5
  Home-page: https://github.com/kitware/wslink
6
6
  Author: Kitware, Inc.
@@ -1,7 +1,7 @@
1
1
  wslink/LICENSE,sha256=I44UH7kDVqxDLnnlOWw_hFL2Fz7RjQ_4vPzZv9NYgTU,1483
2
2
  wslink/__init__.py,sha256=qdLGVhzpEXBoraTnLr5S-8bX9oK8pZCQWe8rZRlwAco,2946
3
3
  wslink/chunking.py,sha256=1DJlGG6fjknGFrqPOtqUUc5tCrijldP7Kdx56d5e3Wg,7337
4
- wslink/emitter.py,sha256=vgpA9pmqMLLPm7UDVLfbDY2mgvm21pngsRmBhYT0GcU,1971
4
+ wslink/emitter.py,sha256=eniDanfasJeEa5rDC92nmgaAVWKjjmgZaqbCZwlwQIw,2228
5
5
  wslink/launcher.py,sha256=8VMs3juObLkyGYQFNLjMoo4qFpKIcxWz0kS-af-DKO4,21170
6
6
  wslink/protocol.py,sha256=IUvdYzXaaKP4qllJps6uQ8zvbipbH6MVwU6o6f60Kuc,17265
7
7
  wslink/publish.py,sha256=Xyv9piZT4HxO5l_SA7zeReH8t6tisVHUgU57Hjzgkcg,1595
@@ -9,9 +9,9 @@ wslink/relay.py,sha256=E8Lzu2Ay7KbOheN1-ArAZawo8lLqdDgJXOZSBuMknYs,86
9
9
  wslink/server.py,sha256=yvhCjpzPOfhbZrpDvW9i4H_uSyuQAe3ZOP-BRBmgHQA,9326
10
10
  wslink/ssl_context.py,sha256=hNOJJCdrStws1Qf6vPvY4vTk9Bf8J5d90W3fS0cRv8o,2290
11
11
  wslink/uri.py,sha256=woCQ4yChUqTMg9IT6YYDtUYeKmCg7OUCEgeBGA-19DY,384
12
- wslink/websocket.py,sha256=wuwqJwgAWmbvtj-FvRezhzXqdUqdoq7nDpWLmetxNTs,6191
12
+ wslink/websocket.py,sha256=mQCcKHM4xAjlMj3gHeuIDgk9TM9cfNniOb5y_hMMQVg,6279
13
13
  wslink/backends/__init__.py,sha256=cyJGjm-YyBSyOEX81owyTbJ3YnrA6dB7--B4LnsEtHI,1214
14
- wslink/backends/aiohttp/__init__.py,sha256=SSK5a_lxuEZGyW_mMMipgvAhJQQLhxAImR3jRokFchM,9301
14
+ wslink/backends/aiohttp/__init__.py,sha256=aD0STOiYI4_WyTPnhKN2XDywN5o5kcfK3VD5ZBf-1Kc,9796
15
15
  wslink/backends/aiohttp/launcher.py,sha256=gHNMvtgNHEwBN_QBRDSCrTp2B4K1PsfV81rKaHi7Cxo,8897
16
16
  wslink/backends/aiohttp/relay.py,sha256=oZAzIQTpsQaObWXaa-_VtoTOUQALC_QLDd9UvWspYaU,13311
17
17
  wslink/backends/generic/__init__.py,sha256=Qu65gWsd2xCSsxybnDtEDI5vMjHN-F5jgPZOyNIxnGs,112
@@ -20,7 +20,7 @@ wslink/backends/jupyter/__init__.py,sha256=Qu65gWsd2xCSsxybnDtEDI5vMjHN-F5jgPZOy
20
20
  wslink/backends/jupyter/core.py,sha256=F8R3uH4m6RHCrHHRiA5UAgDOLdyGbpuCSAgCZxANREk,2794
21
21
  wslink/backends/tornado/__init__.py,sha256=Qu65gWsd2xCSsxybnDtEDI5vMjHN-F5jgPZOyNIxnGs,112
22
22
  wslink/backends/tornado/core.py,sha256=tPMkkhWuO_ovkisVim0zcegwZKEAG4IRUdd_O_0a_R0,2157
23
- wslink-2.3.1.dist-info/METADATA,sha256=vwfCnfjB7VrNadykxK9VYtNT2p4hiPQ_r13R5oMyMOE,3120
24
- wslink-2.3.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
25
- wslink-2.3.1.dist-info/top_level.txt,sha256=N0d8eqvhwhfW1p1yPTmvxlbzhjz7ZyhBfysNvaFqpQY,7
26
- wslink-2.3.1.dist-info/RECORD,,
23
+ wslink-2.3.3.dist-info/METADATA,sha256=ftoh428vQm8_w8T90qSnIv0dnWpxjQ82qAcffEnhH5Y,3120
24
+ wslink-2.3.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
25
+ wslink-2.3.3.dist-info/top_level.txt,sha256=N0d8eqvhwhfW1p1yPTmvxlbzhjz7ZyhBfysNvaFqpQY,7
26
+ wslink-2.3.3.dist-info/RECORD,,
File without changes