我正在构建一个自定义收集器,用于将数据从外部站点导入CKAN(版本1.8)。
它运行良好,并创建元数据和与之关联的资源。我想聚合这些资源并创建一个新的CSV,以便在导入阶段收获时将其保存在数据存储区中。
我知道我可以使用DataStore API,但我不想使用HTTP(对于有权添加内容的收集器,给一个API密钥/用户/ URL / ...是没有意义的)
是否可以直接从收割机调用DataStore API函数? https://github.com/okfn/ckan/blob/master/ckanext/datastore/logic/action.py
每个函数都采用一个未记录的上下文参数。
答案 0 :(得分:2)
你在这里做了几件截然不同的事情:
对于后者,你可以使用:
API只调用逻辑操作(加上auth),所以它们非常相似,但逻辑方法可能会更快,如果你已经在做代码,可能会更自然。这就是说API可以在概念上更清晰,因为你以定义的web apis的形式对你的不同组件有很好的界限。
对于前者(即将CSV转换为JSON),建议您使用Data Converters library,尤其是commas.py部分,它可以转换为您需要的格式。有一个基于数据转换器开发的完整Web服务,但它还没有完全运行。
答案 1 :(得分:0)
我通过使用ckanext-datastorer(对于DataStore)和ckanclient(用于上传文件)解决了这个问题
ckanclient被CKAN 1.8窃听,因为它无法正确处理重定向。我们解决了这个流血和肮脏的补丁https://gist.github.com/mammadori/4945812
更好的修复方法是完全删除urllib并更改整个ckanclient以改为使用请求。
感谢您的支持