Mercurial > wikked
changeset 202:3a16f55687d4
First version of endpoint customization.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 11 Feb 2014 08:12:38 -0800 |
parents | 7209c934fc9b |
children | e845ff2b4bd8 |
files | wikked/resources/defaults.cfg wikked/views/read.py wikked/wiki.py |
diffstat | 3 files changed, 51 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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 +
--- 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]}
--- 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) +