From 9edbd27b4f824b0a3e37f7d74ecdcd0a69336351 Mon Sep 17 00:00:00 2001 From: ziajka Date: Thu, 21 Mar 2019 10:39:49 +0100 Subject: [PATCH] Serve WebUI via get_resource for freezed app --- gns3server/handlers/index_handler.py | 10 ++++---- gns3server/utils/static.py | 38 ---------------------------- gns3server/web/web_server.py | 2 -- tests/handlers/test_index.py | 18 +++++++------ tests/utils/test_static.py | 25 ------------------ 5 files changed, 15 insertions(+), 78 deletions(-) delete mode 100644 gns3server/utils/static.py delete mode 100644 tests/utils/test_static.py diff --git a/gns3server/handlers/index_handler.py b/gns3server/handlers/index_handler.py index 88bd4e76..74eead8e 100644 --- a/gns3server/handlers/index_handler.py +++ b/gns3server/handlers/index_handler.py @@ -22,7 +22,7 @@ from gns3server.controller import Controller from gns3server.compute.port_manager import PortManager from gns3server.compute.project_manager import ProjectManager from gns3server.version import __version__ -from gns3server.utils.static import get_static_path +from gns3server.utils.get_resource import get_resource class IndexHandler: @@ -81,16 +81,16 @@ class IndexHandler: async def webui(request, response): filename = request.match_info["filename"] filename = os.path.normpath(filename).strip("/") - filename = os.path.join('web-ui', filename) + filename = os.path.join('static', 'web-ui', filename) # Raise error if user try to escape if filename[0] == ".": raise aiohttp.web.HTTPForbidden() - static = get_static_path(filename) + static = get_resource(filename) - if not os.path.exists(static): - static = get_static_path(os.path.join('web-ui', 'index.html')) + if static is None or not os.path.exists(static): + static = get_resource(os.path.join('static', 'web-ui', 'index.html')) await response.stream_file(static) diff --git a/gns3server/utils/static.py b/gns3server/utils/static.py deleted file mode 100644 index 004794ef..00000000 --- a/gns3server/utils/static.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2018 GNS3 Technologies Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import os - - -def get_static_path(filename): - """ - Returns full static path for given filename - :param filename: relative filename - :return: absolute path - """ - - static_directory = get_static_dir() - return os.path.join(static_directory, filename) - - -def get_static_dir(): - """ - Returns location of static directory - :return: absolute path - """ - current_dir = os.path.dirname(os.path.abspath(__file__)) - return os.path.abspath(os.path.join(current_dir, '..', 'static')) \ No newline at end of file diff --git a/gns3server/web/web_server.py b/gns3server/web/web_server.py index 9b7c6e19..456aa660 100644 --- a/gns3server/web/web_server.py +++ b/gns3server/web/web_server.py @@ -41,8 +41,6 @@ from ..compute.port_manager import PortManager from ..compute.qemu import Qemu from ..controller import Controller -from gns3server.utils.static import get_static_dir - # do not delete this import import gns3server.handlers diff --git a/tests/handlers/test_index.py b/tests/handlers/test_index.py index 774d3ffd..27d2f09c 100644 --- a/tests/handlers/test_index.py +++ b/tests/handlers/test_index.py @@ -21,7 +21,12 @@ from unittest.mock import patch from gns3server.version import __version__ from gns3server.controller import Controller -from gns3server.utils import static +from gns3server.utils.get_resource import get_resource + + +def get_static(filename): + current_dir = os.path.dirname(os.path.abspath(__file__)) + return os.path.join(os.path.abspath(os.path.join(current_dir, '..', '..', 'gns3server', 'static')), filename) def test_index(http_root): @@ -51,23 +56,20 @@ def test_project(http_root, async_run): def test_web_ui(http_root, tmpdir): - with patch('gns3server.utils.static.get_static_dir') as mock: + with patch('gns3server.utils.get_resource.get_resource') as mock: mock.return_value = str(tmpdir) os.makedirs(str(tmpdir / 'web-ui')) - tmpfile = static.get_static_path('web-ui/testing.txt') + tmpfile = get_static('web-ui/testing.txt') with open(tmpfile, 'w+') as f: f.write('world') response = http_root.get('/static/web-ui/testing.txt') assert response.status == 200 + os.remove(get_static('web-ui/testing.txt')) def test_web_ui_not_found(http_root, tmpdir): - with patch('gns3server.utils.static.get_static_dir') as mock: + with patch('gns3server.utils.get_resource.get_resource') as mock: mock.return_value = str(tmpdir) - os.makedirs(str(tmpdir / 'web-ui')) - tmpfile = static.get_static_path('web-ui/index.html') - with open(tmpfile, 'w+') as f: - f.write('world') response = http_root.get('/static/web-ui/not-found.txt') # should serve web-ui/index.html diff --git a/tests/utils/test_static.py b/tests/utils/test_static.py deleted file mode 100644 index 8fec0f25..00000000 --- a/tests/utils/test_static.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2018 GNS3 Technologies Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import os - -from gns3server.utils.static import get_static_path - - -def test_get_static_path(): - expected = os.path.join('gns3server', 'static', 'test') - assert get_static_path('test').endswith(expected)