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"

そして、データベースで a に属性resource_groupがあることがわかります。ただし、アクションpackage_idはないようです。resource_group_show

リソース dict からその親パッケージに移動する別の方法はありますか?

ありがとう!

4

3 に答える 3

2

CKAN 2.3 以降では、 API 呼び出しpackage_idへの呼び出しで返されます。resource_show

于 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 を取得しようとしている場合、それを見つける唯一の方法は、適切な resource_id を含むものが見つかるまで、package_list を呼び出してからそれぞれに対して package_show を呼び出すことです。

于 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 に答える