From 3dfd1ed1461fbb502e696979242534d9749a4b94 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 14 Mar 2025 08:20:51 +1100 Subject: [PATCH] Static Asset Management (#9292) * Caddyfile: Redirect asset requests - Ensure the static asset files are served by the proxy - Reduce gunicorn / python load - Significant server performance increase * Allow CORS requests to 'assets' path * Update static assets path for vite build * Remove RedirectAssetView * Specify relative base path Ref: https://vite.dev/guide/build.html#relative-base * Revert settings.py * Revert caddyfile * Remove defunct unit test * Add timeout to test --- src/backend/InvenTree/web/tests.py | 5 ----- src/backend/InvenTree/web/urls.py | 16 ---------------- src/frontend/tests/pui_plugins.spec.ts | 2 ++ src/frontend/vite.config.ts | 1 + 4 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/backend/InvenTree/web/tests.py b/src/backend/InvenTree/web/tests.py index d37c7c0af9..e95b167c39 100644 --- a/src/backend/InvenTree/web/tests.py +++ b/src/backend/InvenTree/web/tests.py @@ -84,8 +84,3 @@ class TemplateTagTest(InvenTreeTestCase): rsp = get_frontend_settings(False) self.assertNotIn('show_server_selector', rsp) self.assertEqual(rsp['server_list'], ['aa', 'bb']) - - def test_redirects(self): - """Test the redirect helper.""" - response = self.client.get('/assets/testpath') - self.assertEqual(response.url, '/static/web/assets/testpath') diff --git a/src/backend/InvenTree/web/urls.py b/src/backend/InvenTree/web/urls.py index 97c8bbe59f..c8c05efb62 100644 --- a/src/backend/InvenTree/web/urls.py +++ b/src/backend/InvenTree/web/urls.py @@ -1,31 +1,16 @@ """URLs for web app.""" from django.conf import settings -from django.shortcuts import redirect from django.urls import include, path, re_path from django.views.decorators.csrf import ensure_csrf_cookie from django.views.generic import TemplateView - -class RedirectAssetView(TemplateView): - """View to redirect to static asset.""" - - def get(self, request, *args, **kwargs): - """Redirect to static asset.""" - return redirect( - f'{settings.STATIC_URL}web/assets/{kwargs["path"]}', permanent=True - ) - - spa_view = ensure_csrf_cookie(TemplateView.as_view(template_name='web/index.html')) -assets_path = path('assets/', RedirectAssetView.as_view(), name='web-assets') - urlpatterns = [ path( f'{settings.FRONTEND_URL_BASE}/', include([ - assets_path, path( 'set-password?uid=&token=', spa_view, @@ -34,6 +19,5 @@ urlpatterns = [ re_path('.*', spa_view, name='platform-wildcard'), ]), ), - assets_path, path(settings.FRONTEND_URL_BASE, spa_view, name='platform'), ] diff --git a/src/frontend/tests/pui_plugins.spec.ts b/src/frontend/tests/pui_plugins.spec.ts index 09d52e6904..a9976144cc 100644 --- a/src/frontend/tests/pui_plugins.spec.ts +++ b/src/frontend/tests/pui_plugins.spec.ts @@ -38,6 +38,8 @@ test('Plugins - Settings', async ({ page, request }) => { .fill(originalValue == '999' ? '1000' : '999'); await page.getByRole('button', { name: 'Submit' }).click(); + await page.waitForTimeout(500); + // Change it back await page.getByLabel('edit-setting-NUMERICAL_SETTING').click(); await page.getByLabel('number-field-value').fill(originalValue); diff --git a/src/frontend/vite.config.ts b/src/frontend/vite.config.ts index 8e1e732a06..e8f4feeabf 100644 --- a/src/frontend/vite.config.ts +++ b/src/frontend/vite.config.ts @@ -48,6 +48,7 @@ export default defineConfig({ uploadToken: process.env.CODECOV_TOKEN }) ], + base: '', build: { manifest: true, outDir: '../../src/backend/InvenTree/web/static/web',