diff --git a/src/icalendar/prop.py b/src/icalendar/prop.py index e2b7e18..dba6cc1 100644 --- a/src/icalendar/prop.py +++ b/src/icalendar/prop.py @@ -39,6 +39,7 @@ them directly. from __future__ import absolute_import import re import pytz +import base64 import binascii import time as _time from datetime import ( @@ -133,19 +134,19 @@ class vBinary(object): """ def __init__(self, obj): - self.obj = obj + self.obj = to_unicode(obj) self.params = Parameters(encoding='BASE64', value="BINARY") def __repr__(self): return "vBinary('%s')" % self.to_ical() def to_ical(self): - return binascii.b2a_base64(self.obj)[:-1] + return binascii.b2a_base64(self.obj.encode('utf-8'))[:-1] @staticmethod def from_ical(ical): try: - return ical.decode('base-64') + return base64.b64decode(ical) except UnicodeError: raise ValueError('Not valid base 64 encoding.') diff --git a/src/icalendar/tests/test_unit_prop.py b/src/icalendar/tests/test_unit_prop.py index 9538cee..beae199 100644 --- a/src/icalendar/tests/test_unit_prop.py +++ b/src/icalendar/tests/test_unit_prop.py @@ -15,19 +15,19 @@ class TestProp(unittest.TestCase): self.assertEqual(vBinary.from_ical(txt_ical), txt) # The roundtrip test - txt = 'Binary data \x13 \x56' - txt_ical = 'QmluYXJ5IGRhdGEgEyBW' + txt = b'Binary data \x13 \x56' + txt_ical = b'QmluYXJ5IGRhdGEgEyBW' self.assertEqual(vBinary(txt).to_ical(), txt_ical) self.assertEqual(vBinary.from_ical(txt_ical), txt) + self.assertIsInstance(vBinary('txt').params, Parameters) self.assertEqual( - str(vBinary('txt').params), - "Parameters({'VALUE': 'BINARY', 'ENCODING': 'BASE64'})" + vBinary('txt').params, {'VALUE': 'BINARY', 'ENCODING': 'BASE64'} ) # Long data should not have line breaks, as that would interfere - txt = 'a' * 99 - txt_ical = 'YWFh' * 33 + txt = b'a' * 99 + txt_ical = b'YWFh' * 33 self.assertEqual(vBinary(txt).to_ical(), txt_ical) self.assertEqual(vBinary.from_ical(txt_ical), txt) @@ -456,7 +456,7 @@ class TestProp(unittest.TestCase): ) self.assertEqual(factory.to_ical('priority', 1), b'1') self.assertEqual(factory.to_ical('cn', u'Rasmussen, Max M\xfcller'), - b'Rasmussen\\, Max M\xc3\xbcller') + 'Rasmussen\\, Max M\xc3\xbcller') self.assertEqual( factory.from_ical('cn', 'Rasmussen\\, Max M\xc3\xb8ller'),