--- a/runtime/NevowServer.py Thu Jun 18 10:42:08 2020 +0200
+++ b/runtime/NevowServer.py Thu Jun 18 11:00:26 2020 +0200
@@ -26,6 +26,7 @@
from __future__ import absolute_import
from __future__ import print_function
import os
+import collections
import platform as platform_module
from zope.interface import implements
from nevow import appserver, inevow, tags, loaders, athena, url, rend
@@ -180,10 +181,19 @@
setattr(self, 'action_' + name, callback)
self.bindingsNames.append(name)
-
+
ConfigurableSettings = ConfigurableBindings()
+def newExtensionSetting(display, token):
+ global extensions_settings_od
+ settings = ConfigurableBindings()
+ extensions_settings_od[token] = (settings, display)
+ return settings
+
+def removeExtensionSetting(token):
+ global extensions_settings_od
+ extensions_settings_od.pop(token)
class ISettings(annotate.TypedInterface):
platform = annotate.String(label=_("Platform"),
@@ -211,6 +221,7 @@
customSettingsURLs = {
}
+extensions_settings_od = collections.OrderedDict()
class SettingsPage(rend.Page):
# We deserve a slash
@@ -221,6 +232,27 @@
child_webinterface_css = File(paths.AbsNeighbourFile(__file__, 'webinterface.css'), 'text/css')
implements(ISettings)
+
+ def __getattr__(self, name):
+ global extensions_settings_od
+ if name.startswith('configurable_'):
+ token = name[13:]
+ def configurable_something(ctx):
+ settings, _display = extensions_settings_od[token]
+ return settings
+ return configurable_something
+ raise AttributeError
+
+ def extensions_settings(self, context, data):
+ """ Project extensions settings
+ Extensions added to Configuration Tree in IDE have their setting rendered here
+ """
+ global extensions_settings_od
+ res = []
+ for token in extensions_settings_od:
+ _settings, display = extensions_settings_od[token]
+ res += [tags.h2[display], webform.renderForms(token)]
+ return res
docFactory = loaders.stan([tags.html[
tags.head[
@@ -238,12 +270,16 @@
webform.renderForms('staticSettings'),
tags.h1["Extensions settings:"],
webform.renderForms('dynamicSettings'),
+ extensions_settings
]]])
def configurable_staticSettings(self, ctx):
return configurable.TypedInterfaceConfigurable(self)
def configurable_dynamicSettings(self, ctx):
+ """ Runtime Extensions settings
+ Extensions loaded through Beremiz_service -e or optional runtime features render setting forms here
+ """
return ConfigurableSettings
def sendLogMessage(self, level, message, **kwargs):