[forms] add vocab tags back to dataset view page
--- a/ckanext/example/forms.py
+++ b/ckanext/example/forms.py
@@ -1,5 +1,6 @@
import os
import logging
+from pylons import tmpl_context as c
from ckan.authz import Authorizer
from ckan.logic.converters import convert_to_extras,\
convert_from_extras, convert_to_tags, convert_from_tags, free_tags_only
@@ -7,6 +8,7 @@
from ckan.logic.schema import package_form_schema, group_form_schema
from ckan.lib.base import c, model
from ckan.plugins import IDatasetForm, IGroupForm, IConfigurer
+from ckan.plugins import IGenshiStreamFilter
from ckan.plugins import implements, SingletonPlugin
from ckan.lib.navl.validators import ignore_missing, keep_extras
@@ -121,6 +123,7 @@
"""
implements(IDatasetForm, inherit=True)
implements(IConfigurer, inherit=True)
+ implements(IGenshiStreamFilter, inherit=True)
def update_config(self, config):
"""
@@ -225,26 +228,34 @@
"""
return
- # def filter(self, stream):
- # # Add vocab tags to the bottom of the sidebar.
- # from pylons import request
- # from genshi.filters import Transformer
- # from genshi.input import HTML
- # routes = request.environ.get('pylons.routes_dict')
- # if routes.get('controller') == 'package' \
- # and routes.get('action') == 'read':
- # for vocab in (self.genre_vocab, self.composer_vocab):
- # vocab_tags = [tag for tag in c.pkg_dict.get('tags', [])
- # if tag.get('vocabulary_id') == vocab.id]
- # if not vocab_tags:
- # continue
- # html = '<li class="sidebar-section">'
- # html = html + '<h3>%s</h3>' % vocab.name
- # html = html + '<ul class="tags clearfix">'
- # for tag in vocab_tags:
- # html = html + '<li>%s</li>' % tag.get('name')
- # html = html + "</ul></li>"
- # stream = stream | Transformer("//div[@id='sidebar']")\
- # .append(HTML(html))
- # return stream
-
+ def filter(self, stream):
+ # Add vocab tags to the bottom of the sidebar.
+ from pylons import request
+ from genshi.filters import Transformer
+ from genshi.input import HTML
+ routes = request.environ.get('pylons.routes_dict')
+ context = {'model': model}
+ if routes.get('controller') == 'package' \
+ and routes.get('action') == 'read':
+ for vocab in (GENRE_VOCAB, COMPOSER_VOCAB):
+ try:
+ vocab = get_action('vocabulary_show')(context, {'id': vocab})
+ vocab_tags = [t for t in c.pkg_dict.get('tags', [])
+ if t.get('vocabulary_id') == vocab['id']]
+ except NotFound:
+ vocab_tags = None
+
+ if not vocab_tags:
+ continue
+
+ html = '<li class="sidebar-section">'
+ html = html + '<h3>%s</h3>' % vocab['name']
+ html = html + '<ul class="tags clearfix">'
+ for tag in vocab_tags:
+ html = html + '<li>%s</li>' % tag['name']
+ html = html + "</ul></li>"
+ stream = stream | Transformer(
+ "//div[@id='sidebar']//ul[@class='widget-list']"
+ ).append(HTML(html))
+ return stream
+