Плохое взаимодействие между Zope2 XML-RPC и AT Image Mutator?

Я создаю демо-версию для mr.migrator и столкнулся с досадной проблемой, продемонстрированной здесь:

# create image
proxy = xmlrpclib.ServerProxy(url) # reset
data = open('screenshot.png').read()
try:
    proxy.invokeFactory('Image', 'screenshot.png')
except xmlrpclib.ProtocolError:
    print sys.exc_info()[1]
except xmlrpclib.Fault:
    print "The id is invalid - it is already in use." # most likely
proxy = xmlrpclib.ServerProxy(url + '/screenshot.png')
proxy.setTitle('This is an image')
try:
    proxy.setImage(data) # XXX this fails
except:
    print sys.exc_info()[1]

Этот код должен заполнить поле изображения данными из изображения, но вместо этого происходит сбой в соответствии с:

<ProtocolError for admin:admin@localhost:8080/Plone/screenshot.png: 500 Internal Server Error>

Хуже того, это все, что говорит Zope2. Я не вижу никаких трассировок или чего-либо еще, что указывает на проблему при запуске Plone на переднем плане.

Каков мой следующий шаг? Вы можете проверить и воспроизвести это здесь:

Я бы сделал это "нормальным" способом, передав ключевые аргументы в invokeFactory, но XML-RPC их не поддерживает.

1 ответ

Решение

Скорее всего, это ошибка специального символа. Протокол xml-rpc может использовать любой символ, который позволяет использовать XML. Вы должны попытаться обернуть данные изображения в двоичную оболочку:

wrappedData = xmlrpclib.Binary(open('screenshot.png').read())

Больше информации:

Другие вопросы по тегам