2013-02-06 41 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 ... –