2013-02-06 40 views
3

我正在构建一个自定义收集器,用于将数据从外部站点导入CKAN(版本1.8)。将CSV数据保存到数据存储中,同时在CKAN中收集

它工作得很好,并创建元数据和与之相关的资源。我希望汇总此资源并创建一个新的CSV,以便在导入阶段收集数据时将其保存在数据存储区中。

我知道我可以使用DataStore API,但我不想使用HTTP(给我一个API key/user/URL/...给一个有权添加东西的收集器是没有意义的)

是否可以直接从收集器调用DataStore API函数? https://github.com/okfn/ckan/blob/master/ckanext/datastore/logic/action.py

每个函数都有一个没有记录的上下文参数。

回答

2

你有你在这里做了几个不同的事情:

  • 在数据存储
  • 插入到数据存储

将CSV适当的Python(或JSON)结构插入对于后者,您可以使用:

的API只是调用逻辑的动作(加做AUTH),所以这些都是非常相似的,但逻辑的做法很可能会更快,可以更自然,如果你已经在做的代码。这就是说API可以在概念上更清洁,因为您可以以定义的Web API形式为您的不同组件提供良好的界限。

对于前者(即将CSV转换为JSON),建议您使用Data Converters library,尤其是将commas.py部分转换为您需要的格式。目前正在基于数据转换器开发完整的Web服务,但尚未完全运行。

+0

以及如何将CSV上传到Filestore?否则,如何可以下载它? – mammadori

+0

将CSV上传到FileStore本身就是一个完整的问题,你可以问一个单独的问题吗? –

+1

为了调用逻辑动作,我认为正确的方法是使用例如''ckan.plugins.toolkit.get_action('datastore_create')(context,data_dict)'而不是直接调用逻辑动作函数(或者,如果'ckan.plugins.toolkit'在1.8中不存在,那么就调用'get_action( )',但仍然不直接调用逻辑动作函数本身,原因是扩展可以添加或覆盖逻辑动作函数。 –

0

我解决了这个用ckanext-datastorer(用于数据存储)和ckanclient(上传文件)

ckanclient与CKAN 1.8窃听,因为它没有正确处理重定向。我们用这个流血和脏的解决方案来解决https://gist.github.com/mammadori/4945812

一个更好的解决方案将完全删除urllib并将整个ckanclient更改为使用请求。

感谢您的支持

+0

urllib2处理重定向btw ... –