5

我正在寻找一种方法来查找 CKAN 中资源的 package_id。我通过resource_show操作访问资源:

resource_dict = toolkit.get_action("resource_show")(context, {"id": "my-resource"})

结果 dict 没有告诉我资源属于哪个包。它确实告诉我:

resource_dict.get("package_id", None) == None # <<< True
resource_dict["resource_group_id"] = "some-uuid"

我可以在我的数据库中看到 aresource_group确实有一个package_id属性。但是,似乎没有任何resource_group_show动作。

我还有另一种方法可以从资源字典导航到其父包吗?

谢谢!

4

3 回答 3

2

在 CKAN 2.3 和更新版本中,package_id在对resource_showAPI 调用的调用中返回。

于 2015-10-01T15:25:49.620 回答
0

你是对的,不幸的是当前版本的CKAN(2.2.1)在你调用resource_show时不包含package_id,并且没有resource_group_show调用。如果您正在编写扩展程序,则可以通过执行直接数据库查询来解决此问题:

SELECT resource_group.package_id
  FROM resource, resource_group
 WHERE resource.id='<resource_id>' AND
       resource.resource_group_id=resource_group.id;

如果您尝试使用 API 获取 package_id,找到它的唯一方法是自上而下搜索,调用 package_list,然后为每个调用 package_show,直到找到包含相关 resource_id 的那个。

于 2015-01-13T16:10:26.513 回答
0

你必须使用revision_show方法。

import ckanapi

ckan = ckanapi.RemoteCKAN('url', apikey='key')    
resource = ckan.action.resource_show(id='resource_id')
revision_id = resource['revision_id']
revision = ckan.action.revision_show(id=revision_id)
package_id = revision['packages'][0]
于 2015-06-24T22:48:51.847 回答