4141from jupyter_server .transutils import trans , _
4242from jupyter_server .utils import secure_write , run_sync
4343
44- # check for tornado 3.1.0
44+ # the minimum viable tornado version: needs to be kept in sync with setup.py
45+ MIN_TORNADO = (6 , 1 , 0 )
46+
4547try :
4648 import tornado
47- except ImportError as e :
48- raise ImportError (_ ("The Jupyter Server requires tornado >= 4.0" )) from e
49- try :
50- version_info = tornado .version_info
51- except AttributeError as e :
52- raise ImportError (_ ("The Jupyter Server requires tornado >= 4.0, but you have < 1.1.0" )) from e
53- if version_info < (4 ,0 ):
54- raise ImportError (_ ("The Jupyter Server requires tornado >= 4.0, but you have %s" ) % tornado .version )
49+ assert tornado .version_info >= MIN_TORNADO
50+ except (ImportError , AttributeError , AssertionError ) as e : # pragma: no cover
51+ raise ImportError (
52+ _ ("The Jupyter Server requires tornado >=%s.%s.%s" ) % MIN_TORNADO
53+ ) from e
5554
5655from tornado import httpserver
5756from tornado import ioloop
@@ -1604,31 +1603,12 @@ def init_httpserver(self):
16041603
16051604 @staticmethod
16061605 def _init_asyncio_patch ():
1607- """set default asyncio policy to be compatible with tornado
1608- Tornado 6 (at least) is not compatible with the default
1609- asyncio implementation on Windows
1610- Pick the older SelectorEventLoopPolicy on Windows
1611- if the known-incompatible default policy is in use.
1612- do this as early as possible to make it a low priority and overrideable
1613- ref: https://github.com/tornadoweb/tornado/issues/2608
1614- FIXME: if/when tornado supports the defaults in asyncio,
1615- remove and bump tornado requirement for py38
1616- """
1617- if sys .platform .startswith ("win" ) and sys .version_info >= (3 , 8 ):
1618- import asyncio
1619- try :
1620- from asyncio import (
1621- WindowsProactorEventLoopPolicy ,
1622- WindowsSelectorEventLoopPolicy ,
1623- )
1624- except ImportError :
1625- pass
1626- # not affected
1627- else :
1628- if type (asyncio .get_event_loop_policy ()) is WindowsProactorEventLoopPolicy :
1629- # WindowsProactorEventLoopPolicy is not compatible with tornado 6
1630- # fallback to the pre-3.8 default of Selector
1631- asyncio .set_event_loop_policy (WindowsSelectorEventLoopPolicy ())
1606+ """no longer needed with tornado 6.1"""
1607+ warnings .warn (
1608+ """ServerApp._init_asyncio_patch called, and is longer needed for """
1609+ """tornado 6.1+, and will be removed in a future release.""" ,
1610+ DeprecationWarning
1611+ )
16321612
16331613 @catch_config_error
16341614 def initialize (self , argv = None , find_extensions = True , new_httpserver = True ):
@@ -1648,7 +1628,6 @@ def initialize(self, argv=None, find_extensions=True, new_httpserver=True):
16481628 If True, a tornado HTTPServer instance will be created and configured for the Server Web
16491629 Application. This will set the http_server attribute of this class.
16501630 """
1651- self ._init_asyncio_patch ()
16521631 # Parse command line, load ServerApp config files,
16531632 # and update ServerApp config.
16541633 super (ServerApp , self ).initialize (argv )
0 commit comments