Skip to content

Commit 0fa5c99

Browse files
committed
fixing for lint
1 parent 9eb9dd0 commit 0fa5c99

File tree

6 files changed

+102
-38
lines changed

6 files changed

+102
-38
lines changed

dash/_pages.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,7 @@ def _page_meta_tags(app, request):
396396
image = start_page.get("image", "")
397397
if image:
398398
image = app.get_asset_url(image)
399-
assets_image_url = (
400-
"".join([request.url_root, image.lstrip("/")]) if image else None
401-
)
399+
assets_image_url = "".join([request.url_root, image.lstrip("/")]) if image else None
402400
supplied_image_url = start_page.get("image_url")
403401
image_url = supplied_image_url if supplied_image_url else assets_image_url
404402

dash/dash.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -497,19 +497,25 @@ def __init__( # pylint: disable=too-many-statements
497497

498498
# We have 3 cases: server is either True (we create the server), False
499499
# (defer server creation) or a Flask app instance (we use their server)
500-
if callable(server) and not (hasattr(server, 'route') and hasattr(server, 'run')):
500+
if callable(server) and not (
501+
hasattr(server, "route") and hasattr(server, "run")
502+
):
501503
# Server factory function
502504
self.server = server()
503505
if name is None:
504506
caller_name = getattr(self.server, "name", caller_name)
505-
elif hasattr(server, 'route') and hasattr(server, 'run'):
507+
elif hasattr(server, "route") and hasattr(server, "run"):
506508
self.server = server
507509
if name is None:
508510
caller_name = getattr(server, "name", caller_name)
509511
elif isinstance(server, bool):
510-
self.server = self.server_factory.create_app(caller_name) if server else None
512+
self.server = (
513+
self.server_factory.create_app(caller_name) if server else None
514+
)
511515
else:
512-
raise ValueError("server must be a Flask app, a boolean, or a server factory function")
516+
raise ValueError(
517+
"server must be a Flask app, a boolean, or a server factory function"
518+
)
513519

514520
base_prefix, routes_prefix, requests_prefix = pathname_configs(
515521
url_base_pathname, routes_pathname_prefix, requests_pathname_prefix
@@ -707,6 +713,7 @@ def init_app(self, app: Optional[Any] = None, **kwargs) -> None:
707713
if config.compress:
708714
try:
709715
from flask_compress import Compress
716+
710717
Compress(self.server)
711718
_flask_compress_version = parse_version(
712719
_get_distribution_version("flask_compress")
@@ -741,7 +748,11 @@ def _setup_routes(self):
741748
self.server_factory.setup_component_suites(self.server, self)
742749
self._add_url("_dash-layout", self.serve_layout)
743750
self._add_url("_dash-dependencies", self.dependencies)
744-
self._add_url("_dash-update-component", self.server_factory.dispatch(self.server, self, self._use_async), ["POST"])
751+
self._add_url(
752+
"_dash-update-component",
753+
self.server_factory.dispatch(self.server, self, self._use_async),
754+
["POST"],
755+
)
745756
self._add_url("_reload-hash", self.serve_reload_hash)
746757
self._add_url("_favicon.ico", self.server_factory._serve_default_favicon)
747758
self.server_factory.setup_index(self.server, self)
@@ -759,7 +770,6 @@ def _setup_routes(self):
759770
hook.data["methods"],
760771
)
761772

762-
763773
def setup_apis(self):
764774
"""
765775
Register API endpoints for all callbacks defined using `dash.callback`.
@@ -1368,7 +1378,9 @@ def _initialize_context(self, body, adapter):
13681378
{"prop_id": x, "value": g.input_values.get(x)}
13691379
for x in body.get("changedPropIds", [])
13701380
]
1371-
g.dash_response = self.server_factory.make_response(mimetype="application/json", data=None)
1381+
g.dash_response = self.server_factory.make_response(
1382+
mimetype="application/json", data=None
1383+
)
13721384
g.cookies = dict(adapter.get_cookies())
13731385
g.headers = dict(adapter.get_headers())
13741386
g.path = adapter.get_full_path()
@@ -2004,12 +2016,14 @@ def enable_dev_tools(
20042016
def _wrap_errors(error):
20052017
tb = _get_traceback(secret, error)
20062018
return tb, 500
2019+
20072020
elif hasattr(self.server, "exception_handler"):
20082021
# FastAPI
20092022
@self.server.exception_handler(Exception)
20102023
async def _wrap_errors(request, error):
20112024
tb = _get_traceback(secret, error)
20122025
from fastapi.responses import PlainTextResponse
2026+
20132027
return PlainTextResponse(tb, status_code=500)
20142028

20152029
if debug and dev_tools.ui:
@@ -2325,15 +2339,16 @@ def verify_url_part(served_part, url_part, part_name):
23252339
server_url=jupyter_server_url,
23262340
)
23272341
else:
2328-
self.server_factory.run(self.server, host=host, port=port, debug=debug, **flask_run_options)
2342+
self.server_factory.run(
2343+
self.server, host=host, port=port, debug=debug, **flask_run_options
2344+
)
23292345

23302346
def enable_pages(self) -> None:
23312347
if not self.use_pages:
23322348
return
23332349
if self.pages_folder:
23342350
_import_layouts_from_pages(self.config.pages_folder)
23352351

2336-
23372352
def router():
23382353
if self._got_first_request["pages"]:
23392354
return
@@ -2490,5 +2505,6 @@ def update(pathname_, search_, **states):
24902505
)
24912506

24922507
self.server_factory.before_request(self.server, router)
2508+
24932509
def __call__(self, *args, **kwargs):
24942510
return self.server_factory.__call__(self.server, *args, **kwargs)

dash/server_factories/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33

44
_request_adapter_var = contextvars.ContextVar("request_adapter")
55

6+
67
def set_request_adapter(adapter):
78
_request_adapter_var.set(adapter)
89

10+
911
def get_request_adapter():
1012
return _request_adapter_var.get()

dash/server_factories/base_factory.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from abc import ABC, abstractmethod
22

3+
34
class BaseServerFactory(ABC):
45
def __call__(self, server, *args, **kwargs):
56
# Default: WSGI
@@ -10,7 +11,9 @@ def create_app(self, name="__main__", config=None):
1011
pass
1112

1213
@abstractmethod
13-
def register_assets_blueprint(self, app, blueprint_name, assets_url_path, assets_folder):
14+
def register_assets_blueprint(
15+
self, app, blueprint_name, assets_url_path, assets_folder
16+
):
1417
pass
1518

1619
@abstractmethod
@@ -44,4 +47,3 @@ def jsonify(self, obj):
4447
@abstractmethod
4548
def get_request_adapter(self):
4649
pass
47-

dash/server_factories/fastapi_factory.py

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,32 @@
1010
from contextvars import copy_context
1111
import importlib.util
1212

13+
1314
class FastAPIServerFactory(BaseServerFactory):
1415
def __call__(self, server, *args, **kwargs):
1516
# ASGI: (scope, receive, send)
16-
if (
17-
len(args) == 3
18-
and isinstance(args[0], dict)
19-
and "type" in args[0]
20-
):
17+
if len(args) == 3 and isinstance(args[0], dict) and "type" in args[0]:
2118
return server(*args, **kwargs)
2219
raise TypeError("FastAPI app must be called with (scope, receive, send)")
2320

24-
2521
def create_app(self, name="__main__", config=None):
2622
app = FastAPI()
2723
if config:
2824
for key, value in config.items():
2925
setattr(app.state, key, value)
3026
return app
3127

32-
def register_assets_blueprint(self, app, blueprint_name, assets_url_path, assets_folder):
28+
def register_assets_blueprint(
29+
self, app, blueprint_name, assets_url_path, assets_folder
30+
):
3331
from fastapi.staticfiles import StaticFiles
32+
3433
try:
35-
app.mount(assets_url_path, StaticFiles(directory=assets_folder), name=blueprint_name)
34+
app.mount(
35+
assets_url_path,
36+
StaticFiles(directory=assets_folder),
37+
name=blueprint_name,
38+
)
3639
except RuntimeError:
3740
# directory doesnt exist
3841
pass
@@ -43,7 +46,9 @@ async def _handle_error(request: Request, exc: PreventUpdate):
4346
return Response(status_code=204)
4447

4548
@app.exception_handler(InvalidResourceError)
46-
async def _invalid_resources_handler(request: Request, exc: InvalidResourceError):
49+
async def _invalid_resources_handler(
50+
request: Request, exc: InvalidResourceError
51+
):
4752
return Response(content=exc.args[0], status_code=404)
4853

4954
def _html_response_wrapper(self, view_func):
@@ -60,6 +65,7 @@ async def index(request: Request):
6065
set_request_adapter(adapter)
6166
adapter.set_request(request)
6267
return Response(content=dash_app.render_index(), media_type="text/html")
68+
6369
self.add_url_rule(app, "/", index, endpoint="index", methods=["GET"])
6470

6571
def setup_catchall(self, app, dash_app):
@@ -73,17 +79,25 @@ async def catchall(path: str, request: Request):
7379
adapter.set_request(request)
7480
return Response(content=dash_app.render_index(), media_type="text/html")
7581

76-
self.add_url_rule(app, "/{path:path}", catchall, endpoint="catchall", methods=["GET"])
82+
self.add_url_rule(
83+
app, "/{path:path}", catchall, endpoint="catchall", methods=["GET"]
84+
)
7785

78-
pass # catchall needs to be last to not override other routes
86+
pass # catchall needs to be last to not override other routes
7987

8088
def add_url_rule(self, app, rule, view_func, endpoint=None, methods=None):
8189
if rule == "":
8290
rule = "/"
8391
if isinstance(view_func, str):
8492
# Wrap string or sync function to async FastAPI handler
8593
view_func = self._html_response_wrapper(view_func)
86-
app.add_api_route(rule, view_func, methods=methods or ["GET"], name=endpoint, include_in_schema=False)
94+
app.add_api_route(
95+
rule,
96+
view_func,
97+
methods=methods or ["GET"],
98+
name=endpoint,
99+
include_in_schema=False,
100+
)
87101

88102
def before_request(self, app, func):
89103
# FastAPI does not have before_request, but we can use middleware
@@ -102,7 +116,13 @@ def run(self, app, host, port, debug, **kwargs):
102116
# Dynamically determine the module name from the file path
103117
file_path = frame.filename
104118
module_name = importlib.util.spec_from_file_location("app", file_path).name
105-
uvicorn.run(f"{module_name}:app.server", host=host, port=port, reload=reload, **kwargs)
119+
uvicorn.run(
120+
f"{module_name}:app.server",
121+
host=host,
122+
port=port,
123+
reload=reload,
124+
**kwargs,
125+
)
106126
else:
107127
uvicorn.run(app, host=host, port=port, reload=reload, **kwargs)
108128

@@ -122,6 +142,7 @@ def get_request_adapter(self):
122142

123143
def _make_before_middleware(self, func):
124144
pass
145+
125146
async def middleware(request, call_next):
126147
if func is not None:
127148
if inspect.iscoroutinefunction(func):
@@ -135,13 +156,17 @@ async def middleware(request, call_next):
135156

136157
def _make_after_middleware(self, func):
137158
pass
159+
138160
async def middleware(request, call_next):
139161
response = await call_next(request)
140162
await func()
141163
return response
164+
142165
return middleware
143166

144-
def serve_component_suites(self, dash_app, package_name, fingerprinted_path, request):
167+
def serve_component_suites(
168+
self, dash_app, package_name, fingerprinted_path, request
169+
):
145170
import sys
146171
import mimetypes
147172
import pkgutil
@@ -162,12 +187,14 @@ def serve_component_suites(self, dash_app, package_name, fingerprinted_path, req
162187
)
163188
data = pkgutil.get_data(package_name, path_in_pkg)
164189
from starlette.responses import Response as StarletteResponse
190+
165191
headers = {}
166192
if has_fingerprint:
167193
headers["Cache-Control"] = "public, max-age=31536000"
168194
return StarletteResponse(content=data, media_type=mimetype, headers=headers)
169195
else:
170196
import hashlib
197+
171198
etag = hashlib.md5(data).hexdigest() if data else ""
172199
headers["ETag"] = etag
173200
if request.headers.get("if-none-match") == etag:
@@ -176,8 +203,11 @@ def serve_component_suites(self, dash_app, package_name, fingerprinted_path, req
176203

177204
def setup_component_suites(self, app, dash_app):
178205
from fastapi import Request
206+
179207
async def serve(request: Request, package_name: str, fingerprinted_path: str):
180-
return self.serve_component_suites(dash_app, package_name, fingerprinted_path, request)
208+
return self.serve_component_suites(
209+
dash_app, package_name, fingerprinted_path, request
210+
)
181211

182212
self.add_url_rule(
183213
app,
@@ -206,10 +236,10 @@ async def _dispatch(request: Request):
206236

207237
def _serve_default_favicon(self):
208238
return Response(
209-
content=pkgutil.get_data("dash", "favicon.ico"),
210-
media_type="image/x-icon"
239+
content=pkgutil.get_data("dash", "favicon.ico"), media_type="image/x-icon"
211240
)
212241

242+
213243
class FastAPIRequestAdapter:
214244
def __init__(self):
215245
self._request = None
@@ -224,7 +254,9 @@ async def get_json(self):
224254
return await self._request.json()
225255

226256
def is_json(self):
227-
return self._request.headers.get("content-type", "").startswith("application/json")
257+
return self._request.headers.get("content-type", "").startswith(
258+
"application/json"
259+
)
228260

229261
def get_cookies(self, request=None):
230262
return self._request.cookies

0 commit comments

Comments
 (0)