Skip to content

Commit

Permalink
Fix assets path take request_pathname_prefix into consideration.
Browse files Browse the repository at this point in the history
  • Loading branch information
T4rk1n committed Aug 24, 2018
1 parent e5f7d20 commit b4a4ce9
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 3 deletions.
12 changes: 12 additions & 0 deletions dash/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ def format_tag(tag_name, attributes, inner='', closed=False, opened=False):
'{}="{}"'.format(k, v) for k, v in attributes.items()]))


def get_asset_path(requests_pathname, routes_pathname, asset_path):
i = requests_pathname.rfind(routes_pathname)
req = requests_pathname[:i]

return '/'.join([
# Only take the first part of the pathname
req,
'assets',
asset_path
])


class AttributeDict(dict):
"""
Dictionary subclass enabling attribute lookup/assignment of keys/values.
Expand Down
13 changes: 10 additions & 3 deletions dash/dash.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from ._utils import AttributeDict as _AttributeDict
from ._utils import interpolate_str as _interpolate
from ._utils import format_tag as _format_tag
from ._utils import get_asset_path as _get_asset_path
from . import _configs


Expand Down Expand Up @@ -327,9 +328,9 @@ def _relative_url_path(relative_package_path='', namespace=''):
'Serving files from absolute_path isn\'t supported yet'
)
elif 'asset_path' in resource:
static_url = flask.url_for('assets.static',
filename=resource['asset_path'],
mod=resource['ts'])
static_url = self.get_asset_url(resource['asset_path'])
# Add a bust query param
static_url += '?m={}'.format(resource['ts'])
srcs.append(static_url)
return srcs

Expand Down Expand Up @@ -938,6 +939,12 @@ def add_resource(p, filepath):
elif f == 'favicon.ico':
self._favicon = path

def get_asset_url(self, path):
return _get_asset_path(
self.config.requests_pathname_prefix,
self.config.routes_pathname_prefix,
path)

def run_server(self,
port=8050,
debug=False,
Expand Down
16 changes: 16 additions & 0 deletions tests/test_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# noinspection PyProtectedMember
from dash import _configs
from dash import exceptions as _exc
from dash._utils import get_asset_path
import os


Expand Down Expand Up @@ -88,6 +89,21 @@ def test_pathname_prefix_environ_requests(self):
_, routes, req = _configs.pathname_configs()
self.assertEqual('/requests/', req)

def test_pathname_prefix_assets(self):
req = '/'
routes = '/'
path = get_asset_path(req, routes, 'reset.css')
self.assertEqual('/assets/reset.css', path)

req = '/requests/'
path = get_asset_path(req, routes, 'reset.css')
self.assertEqual('/requests/assets/reset.css', path)

req = '/requests/routes/'
routes = '/routes/'
path = get_asset_path(req, routes, 'reset.css')
self.assertEqual('/requests/assets/reset.css', path)


if __name__ == '__main__':
unittest.main()

0 comments on commit b4a4ce9

Please sign in to comment.