vText, when decoded, should not return a instance of itself but an encoded string.

pull/100/merge
Johannes Raggam 2013-03-24 06:32:58 +01:00
rodzic 4044d9c54c
commit 94e2aa7535
3 zmienionych plików z 8 dodań i 3 usunięć

Wyświetl plik

@ -18,7 +18,8 @@ from .parser import (
q_join,
)
from .prop import TypesFactory
from .prop import vText
from .parser_tools import DEFAULT_ENCODING
######################################
# The component factory
@ -153,6 +154,10 @@ class Component(CaselessDict):
# types here. But when parsing from an ical string with from_ical, we
# want to encode the string into a real icalendar.prop property.
decoded = types_factory.from_ical(name, value)
# TODO: remove when proper decoded is implemented in every prop.* class
# Workaround to decode vText properly
if isinstance(decoded, vText):
decoded = decoded.encode(DEFAULT_ENCODING)
return decoded
def decoded(self, name, default=_marker):

Wyświetl plik

@ -20,7 +20,7 @@ A small example::
vText('-//My product//mxm.dk/')
>>> cal.decoded('prodid')
vText('-//My product//mxm.dk/')
'-//My product//mxm.dk/'
>>> first_event = cal.walk('vevent')[0]
>>> first_event['description'][:75]

Wyświetl plik

@ -41,7 +41,7 @@ class TestCalComponent(unittest.TestCase):
self.assertEqual(c['prodid'], prop.vText(u'-//my product//'))
# ... or decoded to a python type
self.assertEqual(c.decoded('prodid'), u'-//my product//')
self.assertEqual(c.decoded('prodid'), '-//my product//')
# With default values for non existing properties
self.assertEqual(c.decoded('version', 'No Version'), 'No Version')