Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions test_files/more_tests.txt
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,129 @@ u'\xe9'
>>> vcs = vobject.readOne(vcs, allowQP = True)
>>> vcs.serialize()
'BEGIN:VCALENDAR\r\nVERSION:1.0\r\nPRODID:-//OpenSync//NONSGML OpenSync vformat 0.3//EN\r\nBEGIN:VEVENT\r\nUID:20080406T152030Z-7822\r\nDESCRIPTION:foo \xc3\xa5\\nbar \xc3\xa4\\nbaz \xc3\xb6\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n'

vCard Version Selection
.......................

Creating vCard with version parameter:
>>> v3 = vobject.vCard() # Default is 3.0
>>> v3.behavior.versionString
'3.0'
>>> v3_explicit = vobject.vCard('3.0')
>>> v3_explicit.behavior.versionString
'3.0'
>>> v4 = vobject.vCard('4.0')
>>> v4.behavior.versionString
'4.0'

Invalid version raises error:
>>> try:
... vobject.vCard('2.0')
... except ValueError as e:
... print("ValueError raised")
ValueError raised

vCard 4.0 Creation
..................

Create a basic vCard 4.0:
>>> v4 = vobject.vCard('4.0')
>>> v4.add('fn').value = 'John Doe'
>>> v4.add('n').value = vobject.vcard.Name('Doe', 'John')
>>> 'VERSION:4.0' in v4.serialize()
True
>>> 'FN:John Doe' in v4.serialize()
True

vCard 4.0 New Properties
........................

KIND property:
>>> v4 = vobject.vCard('4.0')
>>> v4.add('fn').value = 'Test Group'
>>> v4.add('kind').value = 'group'
>>> 'KIND:group' in v4.serialize()
True

GENDER property:
>>> v4 = vobject.vCard('4.0')
>>> v4.add('fn').value = 'Jane Doe'
>>> v4.add('gender').value = 'F'
>>> 'GENDER:F' in v4.serialize()
True

IMPP property:
>>> v4 = vobject.vCard('4.0')
>>> v4.add('fn').value = 'Test User'
>>> v4.add('impp').value = 'xmpp:user@jabber.example.com'
>>> 'IMPP:xmpp:user@jabber.example.com' in v4.serialize()
True

LANG property:
>>> v4 = vobject.vCard('4.0')
>>> v4.add('fn').value = 'Multilingual Person'
>>> lang = v4.add('lang')
>>> lang.value = 'en'
>>> lang.params['PREF'] = ['1']
>>> 'LANG' in v4.serialize()
True

Reading vCard 4.0 Files
.......................

Read a simple vCard 4.0:
>>> f = get_stream("vcard40_simple.vcf")
>>> v4 = vobject.readOne(f)
>>> v4.version.value
'4.0'
>>> v4.fn.value
'John Doe'

Read a vCard 4.0 with KIND=group:
>>> f = get_stream("vcard40_group.vcf")
>>> v4_group = vobject.readOne(f)
>>> v4_group.kind.value
'group'
>>> len(v4_group.member_list)
3

Read a vCard 4.0 with all properties:
>>> f = get_stream("vcard40_full.vcf")
>>> v4_full = vobject.readOne(f)
>>> v4_full.version.value
'4.0'
>>> v4_full.kind.value
'individual'
>>> v4_full.gender.value
'M'
>>> v4_full.anniversary.value
'20100612'

Dual Version Compatibility
..........................

readOne auto-detects version from VERSION property:
>>> vcard3_str = '''BEGIN:VCARD
... VERSION:3.0
... FN:Test 3.0
... N:Test;3.0;;;
... END:VCARD'''
>>> v3 = vobject.readOne(vcard3_str)
>>> v3.version.value
'3.0'

>>> vcard4_str = '''BEGIN:VCARD
... VERSION:4.0
... FN:Test 4.0
... N:Test;4.0;;;
... KIND:individual
... END:VCARD'''
>>> v4 = vobject.readOne(vcard4_str)
>>> v4.version.value
'4.0'

Both versions serialize correctly:
>>> '3.0' in v3.version.serialize()
True
>>> '4.0' in v4.version.serialize()
True
39 changes: 39 additions & 0 deletions test_files/vcard40_full.vcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
BEGIN:VCARD
VERSION:4.0
KIND:individual
FN:Dr. John Q. Public\, III
FN;LANGUAGE=jp:John Q. Public
N:Public;John;Quinlan;Dr.;III
NICKNAME:Johnny,JQP
PHOTO:http://www.example.com/pub/photos/jqpublic.gif
BDAY:19850415
ANNIVERSARY:20100612
GENDER:M
ADR;TYPE=work:;;123 Main Street;Any Town;CA;91921-1234;U.S.A.
ADR;TYPE=home;PREF=1:;;456 Oak Lane;Somewhere;NY;10001;U.S.A.
TEL;VALUE=uri;TYPE=voice;PREF=1:tel:+1-555-555-5555
TEL;VALUE=uri;TYPE=cell:tel:+1-555-123-4567
EMAIL;TYPE=work:john.public@example.com
EMAIL;TYPE=home;PREF=1:johnny@personal.example.org
IMPP;PREF=1:xmpp:john@jabber.example.com
IMPP:sip:john@voip.example.com
LANG;PREF=1:en
LANG;PREF=2:fr
TZ:America/New_York
GEO:geo:37.386013,-122.082932
TITLE:CEO
ROLE:Executive
LOGO:http://www.example.com/pub/logos/company.png
ORG:Example Corp.;North Division;Marketing
RELATED;TYPE=spouse:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
CATEGORIES:BUSINESS,NETWORKING
NOTE:This is a note about John.\nHe likes vCards.
REV:20231215T120000Z
SOUND:http://www.example.com/pub/sounds/jqpublic.ogg
UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
URL:http://www.example.com/~jqpublic
KEY:http://www.example.com/keys/jqpublic.pgp
FBURL:http://www.example.com/busy/jqpublic
CALADRURI:mailto:jqpublic@example.com
CALURI:http://cal.example.com/jqpublic
END:VCARD
9 changes: 9 additions & 0 deletions test_files/vcard40_group.vcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
BEGIN:VCARD
VERSION:4.0
KIND:group
FN:The Doe Family
UID:urn:uuid:group-doe-family
MEMBER:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
MEMBER:urn:uuid:b8767877-b4a1-4c70-9acc-505d3819e519
MEMBER:mailto:kid@example.com
END:VCARD
9 changes: 9 additions & 0 deletions test_files/vcard40_location.vcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
BEGIN:VCARD
VERSION:4.0
KIND:location
FN:Empire State Building
ADR:;;350 Fifth Avenue;New York;NY;10118;U.S.A.
GEO:geo:40.748817,-73.985428
TEL;VALUE=uri:tel:+1-212-736-3100
URL:http://www.esbnyc.com
END:VCARD
8 changes: 8 additions & 0 deletions test_files/vcard40_multilang.vcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
BEGIN:VCARD
VERSION:4.0
FN;ALTID=1;LANGUAGE=en:Yamada Taro
FN;ALTID=1;LANGUAGE=ja:山田太郎
N;ALTID=1;LANGUAGE=en:Yamada;Taro;;;
N;ALTID=1;LANGUAGE=ja;SORT-AS="yamada,taro":山田;太郎;;;
UID:urn:uuid:multilang-vcard-example
END:VCARD
10 changes: 10 additions & 0 deletions test_files/vcard40_org.vcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
BEGIN:VCARD
VERSION:4.0
KIND:org
FN:ABC Marketing
ORG:ABC\, Inc.;North American Division;Marketing
TEL;VALUE=uri:tel:+1-555-000-0000
EMAIL:marketing@abc.example.com
ADR:;;456 Corporate Way;Business City;NY;10001;U.S.A.
URL:http://www.abc.example.com/marketing
END:VCARD
6 changes: 6 additions & 0 deletions test_files/vcard40_simple.vcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
BEGIN:VCARD
VERSION:4.0
FN:John Doe
N:Doe;John;;;
UID:urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
END:VCARD
Loading