【问题标题】:Save CSV data into the datastore whilst harvesting in CKAN在 CKAN 中收集时将 CSV 数据保存到数据存储中
【发布时间】:2013-02-06 11:16:01
【问题描述】:

我正在构建一个自定义收集器,用于将数据从外部站点导入 CKAN(1.8 版)。

它工作得很好,可以创建元数据和与之关联的资源。我想在导入阶段收集这些资源并创建一个新的 CSV 以将其保存在数据存储区中。

我知道我可以使用 DataStore API,但我不想使用 HTTP(对我来说,将 API 密钥/用户/URL/...提供给有权添加内容的收割机是没有意义的)

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

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

【问题讨论】:

    标签: datastore ckan


    【解决方案1】:

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

    • 将 CSV 转换为适当的 Python(或 JSON)结构以插入数据存储区
    • 插入数据存储区

    对于后者,您可以使用:

    API 只调用逻辑操作(加上进行身份验证),因此这些操作非常相似,但如果您已经在编写代码,逻辑方法可能会更快并且可能更自然。也就是说,API 可以在概念上更清晰,因为您以定义的 Web api 的形式对不同组件有很好的边界。

    对于前者(即 CSV 到 JSON 的转换),建议您使用 Data Converters library,尤其是 commas.py 部分,它可以完全转换为您需要的格式。有一个基于 Data Converters 的完整 Web 服务正在开发中,但尚未完全投入使用。

    【讨论】:

    • 以及如何将 CSV 上传到 Filestore?不然怎么下载?
    • 将 CSV 文件上传到 FileStore 本身就是一个完整的问题,您能单独提出这个问题吗?
    • 对于调用逻辑动作,我认为正确的方法是使用例如ckan.plugins.toolkit.get_action('datastore_create')(context, data_dict)而不是直接调用逻辑动作函数(或者,如果ckan.plugins.toolkit在1.8中不存在,那么直接调用get_action(),但还是不要直接调用逻辑动作函数本身。这样做的原因是扩展可以添加或覆盖逻辑操作功能。
    【解决方案2】:

    我通过使用 ckanext-datastorer(用于 DataStore)和 ckanclient(用于上传文件)解决了这个问题

    ckanclient 存在 CKAN 1.8 的错误,因为它不能正确处理重定向。我们解决了这个出血和肮脏的补丁https://gist.github.com/mammadori/4945812

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

    感谢您的支持

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2021-05-08
      • 2022-01-16
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多