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.
This commit is contained in:
yumoqing 2026-06-25 14:49:52 +08:00
parent 8eb9bc4676
commit 7a297e98df
2 changed files with 6 additions and 1 deletions

View File

@ -68,7 +68,9 @@ class BaseProcessor:
if self.env_set: if self.env_set:
self.run_ns['params_kw'].update(params) self.run_ns['params_kw'].update(params)
return 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() g = ServerEnv()
self.run_ns = DictObject() self.run_ns = DictObject()
self.run_ns.update(g) self.run_ns.update(g)

View File

@ -377,6 +377,9 @@ class ProcessorResource(StaticResource,Url2File):
request['port'] = config.website.port request['port'] = config.website.port
processor = self.url2processor(request, str(request.url), self.request_filename) processor = self.url2processor(request, str(request.url), self.request_filename)
if processor: 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) ret = await processor.handle(request)
return ret return ret