|
23 | 23 |
|
24 | 24 | from graphene_tornado.tornado_graphql_handler import TornadoGraphQLHandler
|
25 | 25 | from graphql import get_default_backend
|
26 |
| -from graphql_ws.constants import GRAPHQL_WS |
| 26 | +from graphql_ws.constants import GRAPHQL_WS, TRANSPORT_WS_PROTOCOL |
27 | 27 | from jupyter_server.base.handlers import JupyterHandler
|
28 | 28 | from tornado import web, websocket
|
29 | 29 | from tornado.ioloop import IOLoop
|
|
36 | 36 | from cylc.uiserver.authorise import Authorization, AuthorizationMiddleware
|
37 | 37 | from cylc.uiserver.resolvers import Resolvers
|
38 | 38 | from cylc.uiserver.websockets import authenticated as websockets_authenticated
|
39 |
| -from cylc.uiserver.websockets.tornado import TornadoSubscriptionServer |
| 39 | + |
40 | 40 | if TYPE_CHECKING:
|
41 | 41 | from graphql.execution import ExecutionResult
|
| 42 | + from cylc.uiserver.websockets.tornado import TornadoSubscriptionServer |
42 | 43 |
|
43 | 44 |
|
44 | 45 | ME = getpass.getuser()
|
@@ -367,11 +368,15 @@ class SubscriptionHandler(CylcAppHandler, websocket.WebSocketHandler):
|
367 | 368 | # No authorization decorators here, auth handled in AuthorizationMiddleware
|
368 | 369 | def initialize(self, sub_server, resolvers, sub_statuses=None):
|
369 | 370 | self.queue: Queue = Queue(100)
|
370 |
| - self.subscription_server: TornadoSubscriptionServer = sub_server |
| 371 | + self.subscription_server: 'TornadoSubscriptionServer' = sub_server |
371 | 372 | self.resolvers: Resolvers = resolvers
|
372 | 373 | self.sub_statuses: Dict = sub_statuses
|
373 | 374 |
|
374 | 375 | def select_subprotocol(self, subprotocols):
|
| 376 | + if TRANSPORT_WS_PROTOCOL in subprotocols: |
| 377 | + # use graphql-transport-ws out of preference |
| 378 | + return TRANSPORT_WS_PROTOCOL |
| 379 | + # fallback to graphql-ws if required |
375 | 380 | return GRAPHQL_WS
|
376 | 381 |
|
377 | 382 | @websockets_authenticated
|
@@ -415,5 +420,6 @@ def context(self):
|
415 | 420 | self.get_current_user()
|
416 | 421 | ).get('name'),
|
417 | 422 | 'ops_queue': {},
|
418 |
| - 'sub_statuses': self.sub_statuses |
| 423 | + 'sub_statuses': self.sub_statuses, |
| 424 | + 'subprotocols': [self.selected_subprotocol], |
419 | 425 | }
|
0 commit comments