# HG changeset patch # User Goffi # Date 1537298213 -7200 # Node ID 0cafb79ced6d12348da620ec7e7cb0c382bf2544 # Parent 9cf592d1e6aa75b5f1d60920b0c5f2b8472f37b9 server: use site names in _moveFirstLevelToDict to better distinguish values for default site at first level + better handling of default menu diff -r 9cf592d1e6aa -r 0cafb79ced6d libervia/server/server.py --- a/libervia/server/server.py Tue Sep 18 21:16:51 2018 +0200 +++ b/libervia/server/server.py Tue Sep 18 21:16:53 2018 +0200 @@ -1753,12 +1753,15 @@ return os.path.join(u'/', C.TPL_RESOURCE, template_data.site or u'sat', C.TEMPLATE_TPL_DIR, template_data.theme, relative_url) - def _moveFirstLevelToDict(self, options, key): + def _moveFirstLevelToDict(self, options, key, keys_to_keep): """Read a config option and put value at first level into u'' dict This is useful to put values for Libervia official site directly in dictionary, and to use site_name as keys when external sites are used. options will be modified in place + @param options(dict): options to modify + @param key(unicode): setting key to modify + @param keys_to_keep(list(unicode)): keys allowed in first level """ try: conf = options[key] @@ -1767,27 +1770,30 @@ if not isinstance(conf, dict): options[key] = {u'': conf} return - default_dict = conf.setdefault(u'', {}) + default_dict = conf.get(u'', {}) to_delete = [] for key, value in conf.iteritems(): - # "/" can't be present in host name, and help to differenciate from - # non vhost dict (which may be used in redirections) - if not isinstance(value, dict) or u'/' in key: + if key not in keys_to_keep: default_dict[key] = value to_delete.append(key) for key in to_delete: del conf[key] + if default_dict: + conf[u''] = default_dict def backendReady(self, __): self.media_dir = self.bridge.getConfig("", "media_dir") self.local_dir = self.bridge.getConfig("", "local_dir") self.cache_root_dir = os.path.join(self.local_dir, C.CACHE_DIR) + self.renderer = template.Renderer(self, self._front_url_filter) + sites_names = self.renderer.sites_paths.keys() - self._moveFirstLevelToDict(self.options, "url_redirections_dict") - self._moveFirstLevelToDict(self.options, "menu_json") + self._moveFirstLevelToDict(self.options, "url_redirections_dict", sites_names) + self._moveFirstLevelToDict(self.options, "menu_json", sites_names) + if not u'' in self.options["menu_json"]: + self.options["menu_json"][u''] = C.DEFAULT_MENU # we create virtual hosts and import Libervia pages into them - self.renderer = template.Renderer(self, self._front_url_filter) self.vhost_root = vhost.NameVirtualHost() default_site_path = os.path.dirname(libervia.__file__) # self.sat_root is official Libervia site diff -r 9cf592d1e6aa -r 0cafb79ced6d twisted/plugins/libervia_server.py --- a/twisted/plugins/libervia_server.py Tue Sep 18 21:16:51 2018 +0200 +++ b/twisted/plugins/libervia_server.py Tue Sep 18 21:16:53 2018 +0200 @@ -160,7 +160,7 @@ ["empty_password_allowed_warning_dangerous_list", None, "", None], ["vhosts_dict", None, {}, None], ["url_redirections_dict", None, {}, None], - ["menu_json", None, C.DEFAULT_MENU, None], + ["menu_json", None, {u'': C.DEFAULT_MENU}, None], ["tickets_trackers_json", None, None, None], ["mr_handlers_json", None, None, None], ]