Skip to content

Commit 25e1f45

Browse files
committed
fix linting
1 parent ef9ff4f commit 25e1f45

7 files changed

Lines changed: 42 additions & 23 deletions

File tree

dash/_callback.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ def insert_callback(
276276
no_output=False,
277277
optional=False,
278278
hidden=None,
279-
):
279+
) -> str:
280280
if prevent_initial_call is None:
281281
prevent_initial_call = config_prevent_initial_callbacks
282282

dash/backends/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import importlib
2+
from typing import Type
3+
24
from .base_server import BaseDashServer
35

46

@@ -12,7 +14,7 @@
1214
}
1315

1416

15-
def get_backend(name: str) -> BaseDashServer:
17+
def get_backend(name: str) -> Type[BaseDashServer]:
1618
module_name, server_class = _backend_imports[name.lower()]
1719
try:
1820
module = importlib.import_module(module_name)

dash/backends/_fastapi.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,14 @@ def _remove_config(config_path):
9494
pass
9595

9696

97-
class FastAPIDashServer(BaseDashServer):
97+
class FastAPIDashServer(BaseDashServer[FastAPI]):
9898
def __init__(self, server: FastAPI):
99+
super().__init__(server)
99100
self.server_type = "fastapi"
100-
self.server: FastAPI = server
101101
self.error_handling_mode = "ignore"
102102
self.request_adapter = FastAPIRequestAdapter
103103
self._before_request_funcs = []
104+
self._before_middleware_added = False
104105

105106
fname = inspect.stack()[2]
106107
file_path = fname.filename
@@ -114,7 +115,6 @@ def __init__(self, server: FastAPI):
114115
hash_digest = hashlib.sha256(file_path.encode("utf-8")).hexdigest()
115116
config_filename = f"{hash_digest}.json"
116117
self._CONFIG_PATH = os.path.join(config_dir, config_filename)
117-
super().__init__()
118118

119119
def __call__(self, *args: Any, **kwargs: Any):
120120
# ASGI: (scope, receive, send)
@@ -232,7 +232,7 @@ def has_request_context(self) -> bool:
232232

233233
def run(self, dash_app: Dash, host, port, debug, **kwargs):
234234
frame = inspect.stack()[2]
235-
dev_tools = dash_app._dev_tools # pylint-disable=W0212
235+
dev_tools = dash_app._dev_tools # pylint: disable=W0212
236236
config = dict(
237237
{"debug": debug} if debug else {"debug": False},
238238
**{f"dev_tools_{k}": v for k, v in dev_tools.items()},
@@ -260,6 +260,7 @@ def run(self, dash_app: Dash, host, port, debug, **kwargs):
260260
# Add any other kwargs as CLI args if needed
261261

262262
try:
263+
# pylint: disable=R1732
263264
proc = subprocess.Popen(uvicorn_args, env=os.environ.copy())
264265
proc.wait()
265266
finally:
@@ -293,7 +294,7 @@ async def middleware(request, call_next):
293294
return response
294295
except PreventUpdate:
295296
return Response(status_code=204)
296-
except Exception as e:
297+
except Exception as e: # pylint: disable=W0718
297298
if self.error_handling_mode in ["raise", "prune"]:
298299
tb = self._get_traceback(None, e)
299300
return Response(content=tb, media_type="text/html", status_code=500)
@@ -465,14 +466,18 @@ async def view_func(_request: Request, body: dict = Body(...)):
465466
)
466467

467468
def enable_compression(self) -> None:
468-
from fastapi.middleware.gzip import GZipMiddleware
469+
from fastapi.middleware.gzip import (
470+
GZipMiddleware,
471+
) # pylint: disable=import-outside-toplevel
469472

470473
self.server.add_middleware(GZipMiddleware, minimum_size=500)
471-
config = _load_config()
474+
config = _load_config(self._CONFIG_PATH)
472475
if "COMPRESS_ALGORITHM" not in config:
473-
config["COMPRESS_ALGORITHM"] = ["gzip"]
476+
config["COMPRESS_ALGORITHM"] = [
477+
"gzip"
478+
] # pylint: disable=no-value-for-parameter
474479

475-
_save_config(config)
480+
_save_config(self._CONFIG_PATH, config)
476481

477482

478483
class FastAPIRequestAdapter(RequestAdapter):

dash/backends/_flask.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,11 @@
3737
from dash import Dash
3838

3939

40-
class FlaskDashServer(BaseDashServer):
40+
class FlaskDashServer(BaseDashServer[Flask]):
4141
def __init__(self, server: Flask) -> None:
42-
self.server: Flask = server
42+
super().__init__(server)
4343
self.server_type = "flask"
4444
self.request_adapter = FlaskRequestAdapter
45-
super().__init__()
4645

4746
def __call__(self, *args: Any, **kwargs: Any):
4847
# Always WSGI

dash/backends/_quart.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,17 @@
3333
from dash.fingerprint import check_fingerprint
3434
from dash._utils import parse_version
3535
from dash import _validate, Dash
36-
from .base_server import BaseDashServer
36+
from .base_server import BaseDashServer, RequestAdapter
3737
from ._utils import format_traceback_html
3838

3939

40-
class QuartDashServer(BaseDashServer):
40+
class QuartDashServer(BaseDashServer[Quart]):
4141
def __init__(self, server: Quart) -> None:
42+
super().__init__(server)
4243
self.server_type = "quart"
43-
self.server: Quart = server
4444
self.config = {}
4545
self.error_handling_mode = "ignore"
4646
self.request_adapter = QuartRequestAdapter
47-
super().__init__()
4847

4948
def __call__(self, *args: Any, **kwargs: Any): # type: ignore[name-defined]
5049
return self.server(*args, **kwargs)
@@ -340,7 +339,7 @@ def enable_compression(self) -> None:
340339
) from error
341340

342341

343-
class QuartRequestAdapter:
342+
class QuartRequestAdapter(RequestAdapter):
344343
def __init__(self) -> None:
345344
self._request = request # type: ignore[assignment]
346345
if self._request is None:
@@ -396,5 +395,6 @@ def origin(self):
396395
def path(self):
397396
return self.request.path
398397

399-
async def get_json(self):
398+
async def get_json(self): # pylint: disable=W0236
399+
# TODO consider using a sync wraper
400400
return await self.request.get_json()

dash/backends/base_server.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
from abc import ABC, abstractmethod
2-
from typing import Any, Dict, Type
2+
from typing import Any, Dict, Type, TypeVar, Generic, Protocol
3+
4+
5+
class _ServerCallable(Protocol): # pylint: disable=too-few-public-methods
6+
def __call__(self, *args: Any, **kwds: Any) -> Any:
7+
raise NotImplementedError
8+
9+
10+
ServerType = TypeVar("ServerType", bound=_ServerCallable)
311

412

513
class RequestAdapter(ABC):
@@ -67,12 +75,16 @@ def path(self) -> str:
6775
raise NotImplementedError()
6876

6977

70-
class BaseDashServer(ABC):
78+
class BaseDashServer(ABC, Generic[ServerType]):
7179
server_type: str
72-
server: Any
80+
server: ServerType
7381
config: Dict[str, Any]
7482
request_adapter: Type[RequestAdapter]
7583

84+
def __init__(self, server: ServerType) -> None:
85+
super().__init__()
86+
self.server = server
87+
7688
def __call__(self, *args, **kwargs) -> Any:
7789
# Default: WSGI
7890
return self.server(*args, **kwargs)

dash/dash.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,6 +2301,7 @@ def run(
23012301
host = host or "127.0.0.1"
23022302
else:
23032303
host = host or os.getenv("HOST", "127.0.0.1")
2304+
assert host
23042305
port = port or os.getenv("PORT", "8050")
23052306
proxy = proxy or os.getenv("DASH_PROXY")
23062307

0 commit comments

Comments
 (0)