Skip to content
Snippets Groups Projects
action.py 2.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • import logging
    
    from ckan.logic.action.create import package_create, user_create, group_member_create
    
    import ckan.model as model
    
    import ckan.lib.dictization.model_dictize as model_dictize
    
    import ckan.plugins.toolkit as toolkit
    
    from ckan.lib.search.common import (
        make_connection, SearchError, SearchQueryError
    )
    import pysolr
    
    anonymous's avatar
    anonymous committed
    from ckan.logic import get_action
    
    
    log = logging.getLogger(__name__)
    
    
    def odsh_package_create(context, data_dict):
        munge_increment_name(data_dict)
    
    anonymous's avatar
    anonymous committed
        return get_action('package_create')(context, data_dict)
    
    def munge_increment_name(data_dict):
        from ckan.lib.munge import munge_title_to_name
    
        name_base = name = munge_title_to_name(data_dict['title'])
        pkg = model.Package.get(name)
        i = 0
        while pkg:
            i += 1
            name = name_base + str(i)
            pkg = model.Package.get(name)
        log.debug('name: %s' % name)
        data_dict['name'] = name
    
    
    
    def odsh_user_create(context, data_dict):
        model = context['model']
        user = user_create(context, data_dict)
    
    anonymous's avatar
    anonymous committed
        groups = toolkit.get_action('group_list')(data_dict={'all_fields': False})
    
        for group in groups:
            group_member_create(context, {'id': group, 'username': user.get('name'), 'role': 'member'})
        return model_dictize.user_dictize(model.User.get(user.get('name')), context)
    
    anonymous's avatar
    anonymous committed
    @toolkit.side_effect_free
    
    anonymous's avatar
    anonymous committed
    def autocomplete(context, data_dict):
    
        query = {
    
    anonymous's avatar
    anonymous committed
            'terms.prefix': data_dict['q'].lower(),
    
    anonymous's avatar
    anonymous committed
            'terms.limit': 20}
    
    
        conn = make_connection(decode_dates=False)
        log.debug('Suggest query: %r' % query)
        try:
    
    anonymous's avatar
    anonymous committed
            solr_response = conn.search('', search_handler='terms', **query)
    
        except pysolr.SolrError as e:
            raise SearchError('SOLR returned an error running query: %r Error: %r' %
                              (query, e))
    
    
    anonymous's avatar
    anonymous committed
        suggest = solr_response.raw_response.get("terms").get("suggest")
        suggestions = sorted(suggest, key=suggest.get, reverse=True)
        filtered_suggestions = []
        for suggestion in suggestions:
            suggestion = suggestion.replace("_", "").strip()
            filtered_suggestions.append(suggestion)
        final_suggestions = list(sorted(set(filtered_suggestions), key=filtered_suggestions.index))[:5]
        return final_suggestions