Odoo Python3 base64 error: TypeError: ожидаемый байтовоподобный объект, а не Text - PullRequest
0 голосов
/ 13 сентября 2018

Я обновил python2 в Odoo v11 до python3. После этого я отредактировал свои дополнения. Один из моих аддонов, я получаю ошибку.

result = method(recs, *args, **kwargs)
File "D:\Odoo 11.0\server\addons\addons- 
trbase\l10n_tr_account_einvoice\models\account_einvoice_provider.py", 
line 698, in action_einvoice_get_invoices
self.einvoice_get_invoices()
File "D:\Odoo 11.0\server\addons\addons- unauth\l10n_tr_account_einvoice_provider_isis\models\account_einvoice_provider.py", line 272, in einvoice_get_invoices
bytedata = base64.decodestring(result.ByteData)
File "D:\Odoo 11.0\python\lib\base64.py", line 552, in decodebytes
_input_type_check(s)
File "D:\Odoo 11.0\python\lib\base64.py", line 520, in _input_type_check
raise TypeError(msg) from err
TypeError: expected bytes-like object, not Text

Python говорит, что;

Устаревший псевдоним декодированных байтов (). Устаревший с версии 3.1.

Я пытаюсь decodebytes () вместо decodestring (), но это не работает.

Вот мой метод класса:

def einvoice_get_invoices(self):
    if self.provider != 'isis':
        return super(AccountEinvoiceProvider, self).einvoice_get_invoices()
    else:
        try:
            client = self.isis_get_client()
            count = 0
            while count < 50:
                count += 1
                result = client.service.GetSingleEnvelope(self.company_id.vat[2:])
                self.isis_check_error(result)
                if result.EnvelopeUUID:
                    bytedata = base64.decodestring(result.ByteData)
                    buffer = io.BytesIO(bytedata)
                    if zipfile.is_zipfile(buffer):
                        file = zipfile.ZipFile(buffer, 'r')
                        for name in file.namelist():
                            bytedata = file.read(name)
                        _logger.debug("Processing Envelope: %s" % bytedata.decode('utf-8'))
                        self.einvoice_process_envelope(bytedata)
                    else:
                        _logger.info("Invalid Zip File! EnvelopeUUID= %s" % result.EnvelopeUUID)
                else:
                    count = 50
            return True
        except WebFault as e:
            _logger.error(_('E-Invoice Provider WebService Error!') + '\n\n' + e.message)
        return False

Как я могу это исправить?

1 Ответ

0 голосов
/ 21 октября 2018

Я решил похожую проблему, не совсем вашу.

В моем случае ошибка была:

TypeError: expected bytes-like object, not 'str'

и решение состоит в том, чтобы кодировать строку (Unicode) перед ее использованием:

bytedata = base64.decodestring(result.ByteData.encode())

Я вообще не знаю, что это за переменная result.ByteData, поэтому я не уверен, применим ли здесь метод encode().

...