16
16
import base64
17
17
import traceback
18
18
from urllib .parse import urlparse
19
- from typing import Any , Callable , Dict , Optional , Union
19
+ from typing import Any , Callable , Dict , Optional , Union , List
20
20
21
21
import flask
22
22
@@ -175,11 +175,13 @@ def _do_skip(error):
175
175
176
176
# werkzeug<2.1.0
177
177
if hasattr (tbtools , "get_current_traceback" ):
178
- return tbtools .get_current_traceback (skip = _get_skip (error )).render_full ()
178
+ return tbtools .get_current_traceback ( # type: ignore
179
+ skip = _get_skip (error )
180
+ ).render_full ()
179
181
180
182
if hasattr (tbtools , "DebugTraceback" ):
181
183
# pylint: disable=no-member
182
- return tbtools .DebugTraceback (
184
+ return tbtools .DebugTraceback ( # type: ignore
183
185
error , skip = _get_skip (error )
184
186
).render_debugger_html (True , secret , True )
185
187
@@ -378,41 +380,47 @@ class Dash:
378
380
_plotlyjs_url : str
379
381
STARTUP_ROUTES : list = []
380
382
383
+ server : flask .Flask
384
+
381
385
def __init__ ( # pylint: disable=too-many-statements
382
386
self ,
383
- name = None ,
384
- server = True ,
385
- assets_folder = "assets" ,
386
- pages_folder = "pages" ,
387
- use_pages = None ,
388
- assets_url_path = "assets" ,
389
- assets_ignore = "" ,
390
- assets_external_path = None ,
391
- eager_loading = False ,
392
- include_assets_files = True ,
393
- include_pages_meta = True ,
394
- url_base_pathname = None ,
395
- requests_pathname_prefix = None ,
396
- routes_pathname_prefix = None ,
397
- serve_locally = True ,
398
- compress = None ,
399
- meta_tags = None ,
400
- index_string = _default_index ,
401
- external_scripts = None ,
402
- external_stylesheets = None ,
403
- suppress_callback_exceptions = None ,
404
- prevent_initial_callbacks = False ,
405
- show_undo_redo = False ,
406
- extra_hot_reload_paths = None ,
407
- plugins = None ,
408
- title = "Dash" ,
409
- update_title = "Updating..." ,
410
- long_callback_manager = None ,
411
- background_callback_manager = None ,
412
- add_log_handler = True ,
413
- hooks : Union [RendererHooks , None ] = None ,
387
+ name : Optional [str ] = None ,
388
+ server : Union [bool , flask .Flask ] = True ,
389
+ assets_folder : str = "assets" ,
390
+ pages_folder : str = "pages" ,
391
+ use_pages : Optional [bool ] = None ,
392
+ assets_url_path : str = "assets" ,
393
+ assets_ignore : str = "" ,
394
+ assets_external_path : Optional [str ] = None ,
395
+ eager_loading : bool = False ,
396
+ include_assets_files : bool = True ,
397
+ include_pages_meta : bool = True ,
398
+ url_base_pathname : Optional [str ] = None ,
399
+ requests_pathname_prefix : Optional [str ] = None ,
400
+ routes_pathname_prefix : Optional [str ] = None ,
401
+ serve_locally : bool = True ,
402
+ compress : Optional [bool ] = None ,
403
+ meta_tags : Optional [List [Dict [str , Any ]]] = None ,
404
+ index_string : str = _default_index ,
405
+ external_scripts : Optional [List [Union [str , Dict [str , Any ]]]] = None ,
406
+ external_stylesheets : Optional [List [Union [str , Dict [str , Any ]]]] = None ,
407
+ suppress_callback_exceptions : Optional [bool ] = None ,
408
+ prevent_initial_callbacks : bool = False ,
409
+ show_undo_redo : bool = False ,
410
+ extra_hot_reload_paths : Optional [List [str ]] = None ,
411
+ plugins : Optional [list ] = None ,
412
+ title : str = "Dash" ,
413
+ update_title : str = "Updating..." ,
414
+ long_callback_manager : Optional [
415
+ Any
416
+ ] = None , # Type should be specified if possible
417
+ background_callback_manager : Optional [
418
+ Any
419
+ ] = None , # Type should be specified if possible
420
+ add_log_handler : bool = True ,
421
+ hooks : Optional [RendererHooks ] = None ,
414
422
routing_callback_inputs : Optional [Dict [str , Union [Input , State ]]] = None ,
415
- description = None ,
423
+ description : Optional [ str ] = None ,
416
424
on_error : Optional [Callable [[Exception ], Any ]] = None ,
417
425
** obsolete ,
418
426
):
@@ -428,7 +436,7 @@ def __init__( # pylint: disable=too-many-statements
428
436
name = getattr (server , "name" , caller_name )
429
437
elif isinstance (server , bool ):
430
438
name = name if name else caller_name
431
- self .server = flask .Flask (name ) if server else None
439
+ self .server = flask .Flask (name ) if server else None # type: ignore
432
440
else :
433
441
raise ValueError ("server must be a Flask app or a boolean" )
434
442
@@ -440,7 +448,7 @@ def __init__( # pylint: disable=too-many-statements
440
448
name = name ,
441
449
assets_folder = os .path .join (
442
450
flask .helpers .get_root_path (name ), assets_folder
443
- ),
451
+ ), # type: ignore
444
452
assets_url_path = assets_url_path ,
445
453
assets_ignore = assets_ignore ,
446
454
assets_external_path = get_combined_config (
@@ -539,14 +547,29 @@ def __init__( # pylint: disable=too-many-statements
539
547
540
548
self ._assets_files = []
541
549
self ._long_callback_count = 0
550
+ if long_callback_manager :
551
+ warnings .warn (
552
+ DeprecationWarning (
553
+ "`long_callback_manager` is deprecated and will be remove in Dash 3.0, "
554
+ "use `background_callback_manager` instead."
555
+ )
556
+ )
542
557
self ._background_manager = background_callback_manager or long_callback_manager
543
558
544
559
self .logger = logging .getLogger (__name__ )
545
560
546
561
if not self .logger .handlers and add_log_handler :
547
562
self .logger .addHandler (logging .StreamHandler (stream = sys .stdout ))
548
563
549
- if isinstance (plugins , patch_collections_abc ("Iterable" )):
564
+ if plugins is not None and isinstance (
565
+ plugins , patch_collections_abc ("Iterable" )
566
+ ):
567
+ warnings .warn (
568
+ DeprecationWarning (
569
+ "The `plugins` keyword will be removed from Dash init in Dash 3.0 "
570
+ "and replaced by a new hook system."
571
+ )
572
+ )
550
573
for plugin in plugins :
551
574
plugin .plug (self )
552
575
@@ -1961,7 +1984,7 @@ def run(
1961
1984
port = "8050" ,
1962
1985
proxy = None ,
1963
1986
debug = None ,
1964
- jupyter_mode : JupyterDisplayMode = None ,
1987
+ jupyter_mode : Optional [ JupyterDisplayMode ] = None ,
1965
1988
jupyter_width = "100%" ,
1966
1989
jupyter_height = 650 ,
1967
1990
jupyter_server_url = None ,
@@ -2096,7 +2119,7 @@ def run(
2096
2119
port = int (port )
2097
2120
assert port in range (1 , 65536 )
2098
2121
except Exception as e :
2099
- e .args = [ f"Expecting an integer from 1 to 65535, found port={ repr (port )} " ]
2122
+ e .args = ( f"Expecting an integer from 1 to 65535, found port={ repr (port )} " ,)
2100
2123
raise
2101
2124
2102
2125
# so we only see the "Running on" message once with hot reloading
@@ -2256,4 +2279,9 @@ def run_server(self, *args, **kwargs):
2256
2279
2257
2280
See `app.run` for usage information.
2258
2281
"""
2282
+ warnings .warn (
2283
+ DeprecationWarning (
2284
+ "Dash.run_server is deprecated and will be removed in Dash 3.0"
2285
+ )
2286
+ )
2259
2287
self .run (* args , ** kwargs )
0 commit comments