diff --git a/addons/base_import/models/base_import.py b/addons/base_import/models/base_import.py index 7201b194193..09d2dcb2852 100644 --- a/addons/base_import/models/base_import.py +++ b/addons/base_import/models/base_import.py @@ -603,11 +603,13 @@ class Import(models.TransientModel): server_format = DEFAULT_SERVER_DATE_FORMAT if field['type'] == 'date' else DEFAULT_SERVER_DATETIME_FORMAT if options.get('%s_format' % field['type'], server_format) != server_format: - user_format = ustr(options.get('%s_format' % field['type'])).encode('utf-8') + # datetime.str[fp]time takes *native strings* in both + # versions, for both data and pattern + user_format = pycompat.to_native(options.get('%s_format' % field['type'])) for num, line in enumerate(data): if line[index]: try: - line[index] = dt.strftime(dt.strptime(ustr(line[index].strip()).encode('utf-8'), user_format), server_format) + line[index] = dt.strftime(dt.strptime(pycompat.to_native(line[index].strip()), user_format), server_format) except ValueError as e: raise ValueError(_("Column %s contains incorrect values. Error in line %d: %s") % (name, num + 1, e)) except Exception as e: diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index a6656af1a5b..49c87a8e9b9 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -632,8 +632,8 @@ class Meeting(models.Model): } # formats will be used for str{f,p}time() which do not support unicode in Python 2, coerce to str - format_date = lang_params.get("date_format", '%B-%d-%Y').encode('utf-8') - format_time = lang_params.get("time_format", '%I-%M %p').encode('utf-8') + format_date = pycompat.to_native(lang_params.get("date_format", '%B-%d-%Y')) + format_time = pycompat.to_native(lang_params.get("time_format", '%I-%M %p')) return (format_date, format_time) @api.model @@ -919,11 +919,11 @@ class Meeting(models.Model): elif interval == 'minutes': delta = timedelta(minutes=duration) trigger.value = delta - valarm.add('DESCRIPTION').value = alarm.name or 'Odoo' + valarm.add('DESCRIPTION').value = alarm.name or u'Odoo' for attendee in meeting.attendee_ids: attendee_add = event.add('attendee') - attendee_add.value = 'MAILTO:' + (attendee.email or '') - result[meeting.id] = cal.serialize() + attendee_add.value = u'MAILTO:' + (attendee.email or u'') + result[meeting.id] = cal.serialize().encode('utf-8') return result diff --git a/addons/mail/models/mail_template.py b/addons/mail/models/mail_template.py index f44ee7be09a..f3a7acb253b 100644 --- a/addons/mail/models/mail_template.py +++ b/addons/mail/models/mail_template.py @@ -45,7 +45,7 @@ def format_tz(env, dt, tz=False, format=False): return format_datetime(ts, format or 'medium', locale=env.context.get("lang") or 'en_US') if format: - return ts.strftime(format) + return pycompat.text_type(ts.strftime(format)) else: lang = env.context.get("lang") langs = env['res.lang'] @@ -54,9 +54,9 @@ def format_tz(env, dt, tz=False, format=False): format_date = langs.date_format or '%B-%d-%Y' format_time = langs.time_format or '%I-%M %p' - fdate = ts.strftime(format_date).decode('utf-8') - ftime = ts.strftime(format_time).decode('utf-8') - return "%s %s%s" % (fdate, ftime, (' (%s)' % tz) if tz else '') + fdate = pycompat.text_type(ts.strftime(format_date)) + ftime = pycompat.text_type(ts.strftime(format_time)) + return u"%s %s%s" % (fdate, ftime, (u' (%s)' % tz) if tz else u'') def format_amount(env, amount, currency): fmt = "%.{0}f".format(currency.decimal_places)