2015-08-11 5 views
0

Я работаю на питон скрипт, который будет: 1) вытащить метаданные ГИС из базы данных предприятия 2) синтаксического анализа метаданных из XML в обычный текст 3) присоединять текстовые файлы соответствующие опубликованные наборы данных в Socrata (которые публикуются ежемесячно) 4) Сценарий также будет запускаться ежемесячно, так что любые изменения схемы в наборе данных предприятия отражаются в файлах метаданных простого текста в Socrata.Удаление вложения набора данных в Socrata с API

Я смог успешно прикреплять файлы текстовых метаданных к опубликованным наборам данных Сократа, используя код, найденный here. Проблема в том, что каждый раз, когда скрипт запускается, добавляется дополнительное вложение. Я хотел бы либо удалить существующее вложение, либо добавить новый, либо перезаписать существующее вложение с содержимым нового.

Я провел много исследований по этому вопросу и не могу найти никакой документации для управления вложениями с использованием API Socrata. Какие-либо предложения?

+0

Не могли бы вы показать свой код !? – Cleb

+0

И, кроме того, примерный набор данных, на который я могу взглянуть на метаданные. – chrismetcalf

ответ

0

Я закончил тем, что понял это. Пришлось изменить несколько строк, чтобы опустошить вложения в функции attach_file в Socrata Python библиотеке от:

def attach_file(self, filename): 
    metadata = self.metadata() 
    if not metadata.has_key('attachments'): 
     metadata['attachments'] = [] 

к:

def attach_file(self, filename): 
    metadata = self.metadata() 
    metadata['attachments'] = [] #empty out metadata, regardless of existing metadata 
0

Законченное используя тот же API, и был в состоянии заменить вложения с помощью следующий код:

def attach_file(self, filename, clear_metadata): 
    metadata = self.metadata() 
    if not metadata.has_key('attachments'): 
     metadata['attachments'] = [] 
    # if the user wants to clear all existing attachments on dataset 
    if clear_metadata: 
     metadata['attachments'] = [] 
    response = self.multipart_post('/assets', filename) 
    if not response.has_key('id'): 
     print "Error uploading file to assets service: no ID returned: %s" % response 
     return 
    attachment = {'blobId': response['id'], 
     'name': response['nameForOutput'], 
     'filename': response['nameForOutput']} 
    metadata['attachments'].append(attachment) 
    self._request("/views/%s.json" % self.id, 'PUT', {'metadata':metadata}) 

def multipart_post(self, url, filename, field='file'): 
    print("Running multipart_post") 
    authBase64 = base64.encodestring('%s:%s' % (self.username, self.password)).replace('\n', '') 

    datagen, headers  = multipart_encode({field: open(filename, "rb")}) 
    headers['X-App-Token'] = self.app_token 
    headers['Authorization'] = "Basic %s" % authBase64 
    print("url=" + url) 
    request = Request("%s%s" % (self.url, url), datagen, headers) 
    print(str(Request)) 
    response = urlopen(request).read() 
    return json.loads(response)