--- a/runtime/NevowServer.py Thu Nov 09 11:20:39 2023 +0100
+++ b/runtime/NevowServer.py Mon Nov 20 11:51:34 2023 +0100
@@ -183,6 +183,17 @@
self.bindingsNames.append(name)
+ customSettingsURLs = {} + def addCustomURL(self, segment, func): + self.customSettingsURLs[segment] = func + def removeCustomURL(self, segment): + del self.customSettingsURLs[segment] + def customLocateChild(self, ctx, segments): + if segment in self.customSettingsURLs: + return self.customSettingsURLs[segment](ctx, segments) ConfigurableSettings = ConfigurableBindings()
@@ -211,8 +222,6 @@
default=lambda *a,**k:_getVersions(),
# pylint: disable=no-self-argument
@@ -252,30 +261,36 @@
"Upload a file to PLC working directory"),
extensions_settings_od = collections.OrderedDict()
-class SettingsPage(rend.Page):
+CSS_tags = [tags.link(rel='stylesheet', + href=url.here.child("webform_css")), + tags.link(rel='stylesheet', + href=url.here.child("webinterface_css"))] +class StyledSettingsPage(rend.Page): # This makes webform_css url answer some default CSS
child_webform_css = webform.defaultCSS
child_webinterface_css = File(paths.AbsNeighbourFile(__file__, 'webinterface.css'), 'text/css')
+class SettingsPage(StyledSettingsPage): - def __getattr__(self, name):
- global extensions_settings_od
- if name.startswith('configurable_'):
- def configurable_something(ctx):
- settings, _display = extensions_settings_od[token]
- return configurable_something
+ # def __getattr__(self, name): + # global extensions_settings_od + # if name.startswith('configurable_'): + # def configurable_something(ctx): + # settings, _display = extensions_settings_od[token] + # return configurable_something def extensions_settings(self, context, data):
""" Project extensions settings
@@ -285,25 +300,24 @@
for token in extensions_settings_od:
_settings, display = extensions_settings_od[token]
- res += [tags.h2[display], webform.renderForms(token)]
+ #res += [tags.a(href=token)[display]] + res += [tags.p[tags.a(href=token)[display]]] + # res += [tags.h2[display], webform.renderForms(token)] docFactory = loaders.stan([tags.html[
tags.title[_("Beremiz Runtime Settings")],
- tags.link(rel='stylesheet',
- href=url.here.child("webform_css")),
- tags.link(rel='stylesheet',
- href=url.here.child("webinterface_css"))
tags.a(href='/')['Back'],
- tags.h1["Runtime settings:"],
+ tags.h2["Runtime service:"], webform.renderForms('staticSettings'),
- tags.h1["Extensions settings:"],
+ tags.h2["Target specific:"], webform.renderForms('dynamicSettings'),
+ tags.h2["Extensions:"], @@ -336,10 +350,45 @@
shutil.copyfileobj(fobj,destfd)
def locateChild(self, ctx, segments):
- if segments[0] in customSettingsURLs:
- return customSettingsURLs[segments[0]](ctx, segments)
+ if segment in extensions_settings_od: + settings, display = extensions_settings_od[segment] + return ExtensionSettingsPage(settings, display), segments[1:] + res = ConfigurableSettings.customLocateChild(ctx, segments) return super(SettingsPage, self).locateChild(ctx, segments)
+class ExtensionSettingsPage(StyledSettingsPage): + docFactory = loaders.stan([ + tags.title[tags.directive("title")], + tags.h1[tags.directive("title")], + tags.a(href='/settings')['Back'], + webform.renderForms('settings') + def render_title(self, ctx, data): + return self._display_name + def configurable_settings(self, ctx): + def __init__(self, settings, display): + self._settings = settings + self._display_name = display + def locateChild(self, ctx, segments): + res = self._settings.customLocateChild(ctx, segments) + return super(ExtensionSettingsPage, self).locateChild(ctx, segments) class WebInterface(athena.LivePage):
--- a/runtime/WampClient.py Thu Nov 09 11:20:39 2023 +0100
+++ b/runtime/WampClient.py Mon Nov 20 11:51:34 2023 +0100
@@ -493,11 +493,13 @@
def RegisterWebSettings(NS):
- NS.ConfigurableSettings.addSettings(
+ WebSettings = NS.newExtensionSetting("Wamp Extension Settings", "wamp_settings") + WebSettings.addSettings( - NS.customSettingsURLs[WAMP_SECRET_URL] = deliverWampSecret
+ WebSettings.addCustomURL(WAMP_SECRET_URL, deliverWampSecret)