2017-01-01 1 views
0

J'essaie d'accéder à tous les événements de mon calendrier, hébergé sur Nextcloud, avec python et la bibliothèque caldav. Avec ce code:Python Caldav, tous les calendriers n'ont aucun nom

client = caldav.DAVClient(url) #like "https://..../nextcloud/remote.php/dav/calendars 
principal = client.principal() 
calendars = principal.calendars() 

Je peux accéder à tous mes calendriers et itérer dessus. Comment puis-je lire uniquement un calendrier spécifique, avec le nom "calendar_name"? Dans ce cas, je reçois tous les calendriers, même si je spécifie le nom du calendrier:

client = caldav.DAVClient(url) #like "https://..../nextcloud/remote.php/dav/calendars/user/calendar_name 
principal = client.principal() 
calendars = principal.calendars() 

Si je change la dernière ligne de code avec CALENDAR_NAME, je reçois un tableau vide.

calendar = principal.calendar('calendar_name') 

Note: Je ne peux accéder à tous les calendriers et les événements avec le premier code affiché, mais tous les noms sont « Aucun », même si l'URL est juste.

+0

Veuillez indiquer le code que vous utilisez pour accéder au nom du calendrier (qui est alors Aucun). – hnh

Répondre

0

Le second extrait vous donne toujours tous les agendas car vous saisissez d'abord le compte (.principal()), puis vous répertoriez tous les agendas du compte (principal.calendars()).

Le troisième extrait ne fonctionnera probablement pas parce que le nom (le nom d'affichage propriété, pas le composant de chemin d'URL) du calendrier est très probablement pas calendar_name mais quelque chose comme Calendar. Théoriquement, il peut même être vide.

Pour accéder à un calendrier unique en utilisant son URL cela peut fonctionner, ne pas essayer:

client = caldav.DAVClient(url) 
calendar = caldav.Calendar(client=client, 
      url="/nextcloud/remote.php/dav/calendars/user/calendar_name") 

Bien qu'il peut être préférable de faire quelque chose comme ceci pour diverses raisons:

client = caldav.DAVClient(url) 
principal = client.principal() 
calendars = principal.calendars() 
calendar = any(c for c in calendars if c.url == your url) 

Pour répondre à votre question actuelle, vous devez ajouter plus d'informations. Si vous voulez la (relative ou absolue) URL du calendrier, utilisez quelque chose comme ceci:

print calendar.url 

Si vous souhaitez récupérer explicitement le calendrier nom d'affichage, cela peut fonctionner:

print calendar.get_properties([dav.DisplayName()]) 

J'espère que cela vous aide.