From 7a297e98df73b7d76cd6b2711ec4ae845c1c517e Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 25 Jun 2026 14:49:52 +0800 Subject: [PATCH] fix: auto-resolve extensionless URLs to processor files Two changes: 1. processorResource._handle: when url2file returns None, try appending each processor extension (.dspy, .ui, .tmpl) to find a match. After finding a processor, override its real_path if fallback was used. 2. baseProcessor.set_run_env: only recalculate real_path if not already set, preserving the fallback value from processorResource. Fixes bricks i18n.js requesting /i18n_getmsgs without .dspy suffix. --- ahserver/baseProcessor.py | 4 +++- ahserver/processorResource.py | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ahserver/baseProcessor.py b/ahserver/baseProcessor.py index 08bc7e4..26cc12b 100644 --- a/ahserver/baseProcessor.py +++ b/ahserver/baseProcessor.py @@ -68,7 +68,9 @@ class BaseProcessor: if self.env_set: self.run_ns['params_kw'].update(params) return - self.real_path = self.resource.url2file(request.path) + # Only calculate real_path if not already set (e.g., by fallback in _handle) + if not hasattr(self, 'real_path') or self.real_path is None: + self.real_path = self.resource.url2file(request.path) g = ServerEnv() self.run_ns = DictObject() self.run_ns.update(g) diff --git a/ahserver/processorResource.py b/ahserver/processorResource.py index 6b25850..8a939f7 100644 --- a/ahserver/processorResource.py +++ b/ahserver/processorResource.py @@ -377,6 +377,9 @@ class ProcessorResource(StaticResource,Url2File): request['port'] = config.website.port processor = self.url2processor(request, str(request.url), self.request_filename) if processor: + # Fix real_path when fallback added an extension + if self.request_filename and (not hasattr(processor, 'real_path') or not processor.real_path): + processor.real_path = self.request_filename ret = await processor.handle(request) return ret