Создание пакета с ресурсами с помощью вызова API package_create в Python - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь загрузить пакет данных с ресурсами в CKAN (через Python).Я могу успешно загрузить пакет без «ресурсов», но я продолжаю сталкиваться с этой ошибкой: 'message': "Only lists of dicts can be placed against subschema ('resources',), not <type 'list'>"

Я несколько раз пытался переформатировать словарь Python, а также использовал json.dumps () всловарь, но затем я сталкиваюсь с ошибкой json при вызове API.

test_dict = 
      {
      'title': 'title of my dataset',
      'start': '2018-09-15 00:00:00',
      'end': '2018-09-20 00:00:00',
      'fact': 'interesting fact',
      'ReportNo': 1234,
      'type': 'data',
      'notes': ' ',
      'owner_org': 'Org',
      'maintainer': 'Me',
      'name': 'Test package for S3',
      'resources': [
          {
                    'package_id': '',
                    'url': 'https://s3-test-bucket/test.txt',
                    'name': 'S3 URL testing',
                    'description': 'does description work?'
                    }
      ]
}

response = requests.post(url, test_dict, headers=auth)
response.json()

Ожидается: 'success': 'True'

Получение: 'message': "Только списки сообщений могутбыть помещенным против подсхемы ('resources',), а не ", '__type': 'Ошибка целостности'

Пожалуйста, кто-нибудь может объяснить правильный формат словаря Python?Желательно с примерами.

Спасибо!

1 Ответ

1 голос
/ 30 мая 2019

Я нашел ответ на основании этого поста: Создание набора данных CKAN с использованием CKAN API и библиотеки запросов Python

Вот код, который я использую:

    headers = json.loads(open('API_KEY','rb').read())
    headers['Content-Type'] = 'application/x-www-form-urlencoded'
    ckan = 'https://yourckanwebsite/api/3/action/'
    uri = ckan + 'package_create'

    data_dict = urllib.parse.quote(json.dumps(test_dict))
    response = requests.post(uri, data=data_dict, headers=headers)
    response.json()
...