在Python 3.4中使用Odoo API导入图像

在Python 3.4中使用Odoo API导入图像,python,base64,openerp,Python,Base64,Openerp,我正在编写一个脚本,以便在我的Odoo数据库中导入产品列表。除了导入图像之外,该脚本与odooapi配合得非常好。 到目前为止,我所做的是从python中的URL导入一个图像,然后在base64中对其进行编码: response = requests.get(image_url) img_obj = Image.open(BytesIO(response.content)) buffer = BytesIO() img_obj.save(buffer, forma

我正在编写一个脚本,以便在我的Odoo数据库中导入产品列表。除了导入图像之外,该脚本与odooapi配合得非常好。 到目前为止,我所做的是从python中的URL导入一个图像,然后在base64中对其进行编码:

    response = requests.get(image_url)
    img_obj = Image.open(BytesIO(response.content))
    buffer = BytesIO()
    img_obj.save(buffer, format="JPEG")
    img = base64.encodestring(buffer.getvalue()).strip()
    try:
        base64.b64decode(img)
    except TypeError:
        padding = len(img) % 4
        if padding == 1:
            img = "Invalid base64 string: {}".format(img)
        elif padding == 2:
            img += b'=='
        elif padding == 3:
            img += b'='
这段代码运行得很好。但是,当我运行python代码以使用Odoo API导入它时,我得到的是:

xmlrpc.client.Fault: Fault 1: 
Traceback (most recent call last):
 File "/opt/odoo/openerp/service/wsgi_server.py", line 56, in xmlrpc_return
 result = openerp.http.dispatch_rpc(service, method, params)
 File "/opt/odoo/openerp/http.py", line 114, in dispatch_rpc
 result = dispatch(method, params)
 File "/opt/odoo/openerp/service/model.py", line 37, in dispatch
 res = fn(db, uid, *params)
 File "/opt/odoo/openerp/service/model.py", line 173, in execute_kw
 return execute(db, uid, obj, method, *args, **kw or {})
 File "/opt/odoo/openerp/service/model.py", line 118, in wrapper
 return f(dbname, *args, **kwargs)
 File "/opt/odoo/openerp/service/model.py", line 181, in execute
 res = execute_cr(cr, uid, obj, method, *args, **kw)
 File "/opt/odoo/openerp/service/model.py", line 170, in execute_cr
 return getattr(object, method)(cr, uid, *args, **kw)
 File "/opt/odoo/openerp/api.py", line 238, in wrapper
 return old_api(self, *args, **kwargs)
 File "/opt/odoo/addons/stock/product.py", line 518, in write
 return super(product_template, self).write(cr, uid, ids, vals, context=context)
 File "/opt/odoo/openerp/api.py", line 238, in wrapper
 return old_api(self, *args, **kwargs)
 File "/opt/odoo/openerp/api.py", line 369, in old_api
 result = method(recs, *args, **kwargs)
 File "/opt/odoo/addons/account/models/product.py", line 45, in write
 res = super(ProductTemplate, self).write(vals)
 File "/opt/odoo/openerp/api.py", line 236, in wrapper
 return new_api(self, *args, **kwargs)
 File "/opt/odoo/openerp/api.py", line 562, in new_api
 result = method(self._model, cr, uid, self.ids, *args, **old_kwargs)
 File "/opt/odoo/addons/product/product.py", line 705, in write
 res = super(product_template, self).write(cr, uid, ids, vals, context=context)
 File "/opt/odoo/openerp/api.py", line 238, in wrapper
 return old_api(self, *args, **kwargs)
 File "/opt/odoo/openerp/api.py", line 369, in old_api
 result = method(recs, *args, **kwargs)
 File "/opt/odoo/addons/mail/models/mail_thread.py", line 274, in write
 result = super(MailThread, self).write(values)
 File "/opt/odoo/openerp/api.py", line 236, in wrapper
 return new_api(self, *args, **kwargs)
 File "/opt/odoo/openerp/models.py", line 3820, in write
 self._write(old_vals)
 File "/opt/odoo/openerp/api.py", line 236, in wrapper
 return new_api(self, *args, **kwargs)
 File "/opt/odoo/openerp/api.py", line 562, in new_api
 result = method(self._model, cr, uid, self.ids, *args, **old_kwargs)
 File "/opt/odoo/openerp/models.py", line 3971, in _write
 result += self._columns[field].set(cr, self, id, field, vals[field], user, context=rel_context) or []
 File "/opt/odoo/openerp/osv/fields.py", line 646, in set
 'datas': value,
 File "/opt/odoo/openerp/api.py", line 236, in wrapper
 return new_api(self, *args, **kwargs)
 File "/opt/odoo/openerp/api.py", line 478, in new_api
 result = method(self._model, cr, uid, *args, **old_kwargs)
 File "/opt/odoo/openerp/addons/base/ir/ir_attachment.py", line 459, in create
 values['mimetype'] = self._compute_mimetype(values)
 File "/opt/odoo/openerp/addons/base/ir/ir_attachment.py", line 252, in _compute_mimetype
 mimetype = guess_mimetype(values['datas'].decode('base64'))
 File "/usr/lib/python2.7/xmlrpclib.py", line 503, in decode
 self.data = base64.decodestring(data)
 File "/usr/lib/python2.7/base64.py", line 321, in decodestring
 return binascii.a2b_base64(s)
Error: Incorrect padding
我已尝试更正base64填充(正如您在我以前的代码中所看到的),但这不起作用。有人知道我如何解决这个问题吗? 它可能来自我的脚本,它在Python 3.4中,而Odoo在Python 2.7中


谢谢,

好的,我终于找到问题了。 正如我想知道的,问题来自于Python 3.4和Python 2.7之间的差异。 我只是在Python2.7中运行我的代码,只是更改了一些库导入,现在,它的工作:-)


希望这能帮助别人

请正确格式化您的回溯!