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