如何列出CKAN中的所有数据集(不仅是活动数据集)

时间:2015-01-08 08:51:29

标签: dataset ckan

我正在开发一个基于CKAN的项目,我需要在页面中列出所有具有状态"活动"的数据集。 "草案"。当您转到数据集页面时,您只能看到那些状态标记为"活动"但不是" draft"。     如果我使用API​​(调用package_list()方法)或REST调用(http://localhost/api/3/action/package_list),CKAN只返回" active"数据集,但不是"草稿"。我对文档进行了双重和三重检查,显然无法按状态列出数据集。     有没有人知道如何做到这一点?有没有人这样做过?     谢谢!

2 个答案:

答案 0 :(得分:1)

如果没有别的,你可以write an extension来做这件事。数据库调用本身非常简单:

SELECT id,title,name FROM package WHERE state='active' OR state='draft';

答案 1 :(得分:1)

我设法修改CKAN核心以列出没有状态“草稿”或“已删除”的数据集,并且它可以工作,但我不想触及CKAN的核心,我想使用插件来做到这一点,所以正常的做法是实现plugins.IActions并使用自定义方法覆盖package_list方法。我已经编写了自己的扩展来尝试修改method package_list()上的CKAN行为,但我似乎无法弄明白如何使其工作。 这是我的代码:

@side_effect_free
def package_list_custom(context, data_dict=None):
    datasets = []
    dataset_q = (model.Session.query(model.Package)
     .join(model.PackageRole))
    for dataset in dataset_q:
        if dataset.state != 'draft' and dataset.state != 'deleted':
            datasets.append(dataset)
    return [dataset.id for dataset in datasets]

class Cnaf_WorkflowPlugin(plugins.SingletonPlugin):
    plugins.implements(plugins.IActions)

    def get_actions(self):
        return {
            'package_list' : package_list_custom
        }

如果我修改CKAN核心它的效果非常好,但问题是我不能触摸它,所以我不得不通过扩展来实现它。

编辑:好的,我设法让它工作,你需要用@side_effect_free来装饰方法。我修改了我的代码,现在它可以工作了。