Ошибка типа при попытке загрузить изображения из Google App Engine в Picasa с помощью API GData - PullRequest
2 голосов
/ 11 ноября 2009

Я пытаюсь написать небольшой инструмент для загрузки изображений из Google App Engine в Picasa. Выборка изображения работает, но когда я пытаюсь загрузить его, я получаю сообщение об ошибке " TypeError: stat () аргумент 1 должен быть (закодированная строка без байтов NULL), а не str "

Код в основном выглядит так:

def getfile(url):
    result = urlfetch.fetch(url)
    if result.status_code == 200:
        return (result.content)
    logging.error ("[-] Error fetching URL: %s" % url)

def uploadpicture(comment,pic):
    album_url = '/data/feed/api/user/%s/album/%s' % (username, album)
    fname = "image.jpg"
    entry = gd_client.InsertPhotoSimple(album_url, fname, comment, pic, content_type='image/jpeg')

picurl = "http://brilliantleap.com/blog/frog.jpg"
pic = getfile(picurl)
comment = "Test"
uploadpicture(comment, pic)

Полный Stacktrace:

Traceback (последний вызов был последним):

Файл "/home/birt/stuff/google/appengine/ext/webapp/init.py", строка 507, в вызов handler.get (* группа)

Файл "/home/birt/stuff/app_picasaupload/main.py", строка 124, в get Загрузить картинку (комментарий, картинка)

Файл "/home/birt/stuff/app_picasaupload/main.py", строка 104, в загружаемой картинке entry = gd_client.InsertPhotoSimple (album_url, имя_файла, комментарий, рис., content_type = 'image / jpeg')

Файл "/home/birt/stuff/app_picasaupload/gdata/photos/service.py", строка 469, в InsertPhotoSimple content_type)

Файл "/home/birt/stuff/app_picasaupload/gdata/photos/service.py", строка 398, в InsertPhoto os.path.exists (filename_or_handle): # это имя файла

Файл "/usr/lib/python2.5/posixpath.py", строка 171, существует st = os.stat (путь)

Файл "/home/birt/stuff/google/appengine/tools/dev_appserver.py", строка 1109, , вызов если не FakeFile.IsFileAccessible (путь):

Файл "/home/birt/stuff/google/appengine/tools/dev_appserver.py", строка 1018, в IsFileAccessible normcase = normcase)

Файл "/home/birt/stuff/google/appengine/tools/dev_appserver.py", строка 1036, в _IsFileAccessibleNoCache if os.path.isdir (имя_файла):

Файл "/usr/lib/python2.5/posixpath.py", строка 195, в isdir st = os.stat (путь)

TypeError: аргумент stat () 1 должен быть (кодированная строка без NULL-байтов), а не str

Есть идеи? : -)

1 Ответ

5 голосов
/ 12 ноября 2009

Решением этой проблемы было использование StringIO: -)

(http://docs.python.org/library/stringio.html)

добавление

pic = StringIO.StringIO(pic)

конвертирует result.content из urlfetch в файловый формат, ожидаемый gdata.

...