# HG changeset patch # User Ludovic Chabant # Date 1392135158 28800 # Node ID 3a16f55687d4f8a9a92a77be85f944f7e014a791 # Parent 7209c934fc9bfbadff24bfcb17b6f8e64ba91a29 First version of endpoint customization. diff -r 7209c934fc9b -r 3a16f55687d4 wikked/resources/defaults.cfg --- a/wikked/resources/defaults.cfg Tue Feb 11 08:12:21 2014 -0800 +++ b/wikked/resources/defaults.cfg Tue Feb 11 08:12:38 2014 -0800 @@ -9,3 +9,10 @@ database_url=sqlite:///%(root)s/.wiki/wiki.db async_updates=False +[endpoint:special] +query=False + +[endpoint:user] +query=False +default=special:User + diff -r 7209c934fc9b -r 3a16f55687d4 wikked/views/read.py --- a/wikked/views/read.py Tue Feb 11 08:12:21 2014 -0800 +++ b/wikked/views/read.py Tue Feb 11 08:12:38 2014 -0800 @@ -65,6 +65,8 @@ else: additional_info['user'] = False + force_resolve = ('force_resolve' in request.args) + endpoint, value, path = split_url_from_viewarg(url) if endpoint is None: # Normal page. @@ -72,19 +74,37 @@ path, convert_url=False, check_perms=CHECK_FOR_READ, - force_resolve=('force_resolve' in request.args)) + force_resolve=force_resolve) result = {'meta': get_page_meta(page), 'text': page.text} result.update(additional_info) return jsonify(result) - # Meta listing page. + # Meta listing page or special endpoint. meta_page_url = '%s:%s' % (endpoint, path) info_page = get_page_or_none( meta_page_url, convert_url=False, check_perms=CHECK_FOR_READ, - force_resolve=('force_resolve' in request.args)) + force_resolve=force_resolve) + + endpoint_info = g.wiki.endpoints.get(endpoint) + if endpoint_info is not None: + # We have some information about this endpoint... + if endpoint_info.default and info_page is None: + # Default page text. + info_page = get_page_or_404( + endpoint_info.default, + convert_url=False, + check_perms=CHECK_FOR_READ, + force_resolve=force_resolve) + + if not endpoint_info.query: + # Not a query-based endpoint (like categories). Let's just + # return the text. + result = {'meta': get_page_meta(info_page), 'text': info_page.text} + result.update(additional_info) + return jsonify(result) # Get the list of pages to show here. query = {endpoint: [value]} diff -r 7209c934fc9b -r 3a16f55687d4 wikked/wiki.py --- a/wikked/wiki.py Tue Feb 11 08:12:21 2014 -0800 +++ b/wikked/wiki.py Tue Feb 11 08:12:38 2014 -0800 @@ -149,6 +149,13 @@ self._config = config +class EndpointInfo(object): + def __init__(self, name): + self.name = name + self.query = True + self.default = None + + class Wiki(object): """ The wiki class! This is where the magic happens. """ @@ -166,6 +173,7 @@ self.main_page_url = '/' + parameters.config.get('wiki', 'main_page').strip('/') self.templates_url = '/' + parameters.config.get('wiki', 'templates_dir').strip('/') + '/' + self.endpoints = self._createEndpointInfos(parameters.config) self.fs = parameters.fs_factory() self.index = parameters.index_factory() @@ -322,6 +330,18 @@ for page in self.db.getUncachedPages(): page._ensureExtendedData() + def _createEndpointInfos(self, config): + endpoints = {} + sections = [s for s in config.sections() if s.startswith('endpoint:')] + for s in sections: + ep = EndpointInfo(s[9:]) # 9 = len('endpoint:') + if config.has_option(s, 'query'): + ep.query = config.getboolean(s, 'query') + if config.has_option(s, 'default'): + ep.default = config.get(s, 'default') + endpoints[ep.name] = ep + return endpoints + def reloader_stat_loop(wiki, interval=1): mtimes = {} @@ -340,3 +360,4 @@ elif mtime > old_time: print "Change detected in '%s'." % path time.sleep(interval) +