Сохраняйте данные CSV в хранилище данных во время сбора данных в CKAN.

Я создаю собственный харвестер для импорта данных с внешнего сайта в CKAN (версия 1.8).

Он работает довольно хорошо и создает метаданные и связанные с ними ресурсы. Я хотел бы объединить эти ресурсы и создать новый файл CSV, чтобы сохранить его в хранилище данных во время сбора на этапе импорта.

Я знаю, что могу использовать DataStore API, но я бы предпочел не использовать HTTP (для меня нет смысла давать ключ API/пользователя/URL/... сборщику, у которого есть разрешения на добавление материала)

Можно ли вызывать функции DataStore API напрямую из харвестера? https://github.com/okfn/ckan/blob/master/ckanext/datastore/logic/action.py

Каждая функция принимает параметр контекста, который не задокументирован.


person fox    schedule 06.02.2013    source источник


Ответы (2)


У вас есть несколько разных вещей, которые вы делаете здесь:

  • Преобразование CSV в соответствующую структуру Python (или JSON) для вставки в хранилище данных
  • Вставка в хранилище данных

Для последнего вы можете использовать:

API просто вызывает логические действия (плюс выполняет аутентификацию), поэтому они очень похожи, но логический подход, вероятно, будет быстрее и может быть более естественным, если вы уже пишете код. Тем не менее, API может быть концептуально чище, поскольку у вас есть хорошие границы для ваших различных компонентов в виде определенных веб-API.

Для первого (т. е. преобразования CSV в JSON) рекомендуется использовать библиотеку преобразователей данных, особенно запятые. py, который преобразуется именно в нужный вам формат. На основе преобразователей данных разрабатывается полноценный веб-сервис, но он еще не полностью функционирует.

person Rufus Pollock    schedule 06.02.2013
comment
И как загрузить CSV в Filestore? Иначе как его можно было скачать? - person mammadori; 06.02.2013
comment
Загрузка CSV в FileStore — это отдельный вопрос, можно ли задать его отдельным вопросом? - person Sean Hammond; 06.02.2013
comment
Для вызова логических действий я считаю правильным использовать, например. ckan.plugins.toolkit.get_action('datastore_create')(context, data_dict) вместо прямого вызова функции логического действия (или, если ckan.plugins.toolkit не существует в 1.8, то просто вызовите get_action() напрямую, но при этом не вызывайте непосредственно саму функцию логического действия. Причина этого в том, что расширения могут добавлять или переопределять функции логического действия. - person Sean Hammond; 06.02.2013

Я решил это, используя ckanext-datastorer (для DataStore) и ckanclient (для загрузки файла)

ckanclient содержит ошибки в CKAN 1.8, потому что он неправильно обрабатывает перенаправления. Мы решили проблему с помощью этого кровоточащего и грязного патча https://gist.github.com/mammadori/4945812.

Лучшим решением было бы полностью удалить urllib и изменить весь ckanclient, чтобы вместо этого использовать запросы.

Спасибо за поддержку

person fox    schedule 13.02.2013