[Calypso] [Patch] Import all contacts from file

Guido Günther agx at sigxcpu.org
Sat Jan 2 07:04:59 PST 2016


Hi,
On Fri, Jan 01, 2016 at 12:04:54PM -0200, Raniere Silva wrote:
> I'm not sure why
> 
>     $ calypso.py --import foo/bar my-vcard.vcf
> 
> import only the first contact from my-vcard.vcf.
> The behaviour that I expected from the previous command
> was to import all the contacts so I fixed this,
> see the attachment.

According to https://tools.ietf.org/html/rfc6350#section-6.1.1 there can
be several entities within a single file so having this makes sense to
me.

Cheers,
 -- Guido

> 
> Cheers and Happy New Year.
> 
> Raniere

> From b5b95e0937b7c82b65279fdbcd1d8aeab4bae878 Mon Sep 17 00:00:00 2001
> From: Raniere Silva <raniere at ime.unicamp.br>
> Date: Fri, 1 Jan 2016 11:59:30 -0200
> Subject: [PATCH] Import all the vcard items one the file
> 
> ---
>  calypso/webdav.py | 27 ++++++++++++++-------------
>  1 file changed, 14 insertions(+), 13 deletions(-)
> 
> diff --git a/calypso/webdav.py b/calypso/webdav.py
> index c23d4e4..b533a57 100644
> --- a/calypso/webdav.py
> +++ b/calypso/webdav.py
> @@ -501,21 +501,22 @@ class Collection(object):
>          """
>  
>          try:
> -            new_ics = vobject.readOne(codecs.open(path,encoding='utf-8').read())
> -            if new_ics.name == 'VCALENDAR':
> -
> -                events = new_ics.vevent_list
> -                for ve in events:
> -                    # Check for events with both dtstart and duration entries and
> -                    # delete the duration one
> -                    if ve.contents.has_key('dtstart') and ve.contents.has_key('duration'):
> -                        del ve.contents['duration']
> -                    new_ics.vevent_list = [ve]
> +            new_object = vobject.readComponents(codecs.open(path,encoding='utf-8').read())
> +            for new_ics in new_object:
> +                if new_ics.name == 'VCALENDAR':
> +
> +                    events = new_ics.vevent_list
> +                    for ve in events:
> +                        # Check for events with both dtstart and duration entries and
> +                        # delete the duration one
> +                        if ve.contents.has_key('dtstart') and ve.contents.has_key('duration'):
> +                            del ve.contents['duration']
> +                        new_ics.vevent_list = [ve]
> +                        new_item = Item(new_ics.serialize(), None, path)
> +                        self.import_item(new_item, path)
> +                else:
>                      new_item = Item(new_ics.serialize(), None, path)
>                      self.import_item(new_item, path)
> -            else:
> -                new_item = Item(new_ics.serialize(), None, path)
> -                self.import_item(new_item, path)
>              return True
>          except Exception, ex:
>              self.log.exception("Failed to import: %s", path)
> -- 
> 2.6.0
> 




> _______________________________________________
> Calypso mailing list
> Calypso at keithp.com
> http://keithp.com/mailman/listinfo/calypso



More information about the Calypso mailing list