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 (
@@ -546,7 +554,9 @@ def __init__( # pylint: disable=too-many-statements
546
554
if not self .logger .handlers and add_log_handler :
547
555
self .logger .addHandler (logging .StreamHandler (stream = sys .stdout ))
548
556
549
- if isinstance (plugins , patch_collections_abc ("Iterable" )):
557
+ if plugins is not None and isinstance (
558
+ plugins , patch_collections_abc ("Iterable" )
559
+ ):
550
560
for plugin in plugins :
551
561
plugin .plug (self )
552
562
@@ -1961,7 +1971,7 @@ def run(
1961
1971
port = "8050" ,
1962
1972
proxy = None ,
1963
1973
debug = None ,
1964
- jupyter_mode : JupyterDisplayMode = None ,
1974
+ jupyter_mode : Optional [ JupyterDisplayMode ] = None ,
1965
1975
jupyter_width = "100%" ,
1966
1976
jupyter_height = 650 ,
1967
1977
jupyter_server_url = None ,
@@ -2096,7 +2106,7 @@ def run(
2096
2106
port = int (port )
2097
2107
assert port in range (1 , 65536 )
2098
2108
except Exception as e :
2099
- e .args = [ f"Expecting an integer from 1 to 65535, found port={ repr (port )} " ]
2109
+ e .args = ( f"Expecting an integer from 1 to 65535, found port={ repr (port )} " ,)
2100
2110
raise
2101
2111
2102
2112
# so we only see the "Running on" message once with hot reloading
0 commit comments