41
41
from jupyter_server .transutils import trans , _
42
42
from jupyter_server .utils import secure_write , run_sync
43
43
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
+
45
47
try :
46
48
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
55
54
56
55
from tornado import httpserver
57
56
from tornado import ioloop
@@ -1604,31 +1603,12 @@ def init_httpserver(self):
1604
1603
1605
1604
@staticmethod
1606
1605
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
+ )
1632
1612
1633
1613
@catch_config_error
1634
1614
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):
1648
1628
If True, a tornado HTTPServer instance will be created and configured for the Server Web
1649
1629
Application. This will set the http_server attribute of this class.
1650
1630
"""
1651
- self ._init_asyncio_patch ()
1652
1631
# Parse command line, load ServerApp config files,
1653
1632
# and update ServerApp config.
1654
1633
super (ServerApp , self ).initialize (argv )
0 commit comments