2017-01-01 1 views
0

Ich versuche mit Python und der caldav-Bibliothek auf alle Ereignisse meines Kalenders zuzugreifen, die auf Nextcloud gehostet werden. Mit diesem Code:Python Caldav, alle Kalender haben keinen Namen

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

ich alle meine Kalender zugreifen können und über sie iterieren.

Wie kann ich nur einen bestimmten Kalender mit dem Namen "calendar_name" lesen? In diesem Fall bekomme ich alle Kalender, auch wenn ich den Kalender Namen angeben:

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

Wenn ich die letzte Zeile des Codes mit CALENDAR_NAME ändern, ich ein leeres Array erhalten.

calendar = principal.calendar('calendar_name') 

Hinweis: ich alle Kalender und Ereignisse mit dem ersten Code geschrieben zugreifen kann, aber alle Namen sind „None“, auch wenn die URL richtig ist.

+0

Bitte zeigen Sie den Code an, den Sie verwenden, um auf den Kalendernamen zuzugreifen (der dann None ist). – hnh

Antwort

0

Das zweite Schnipsel gibt Ihnen noch alle Kalender, weil Sie zuerst das Konto (.principal()) greifen und dann alle Kalender auflisten, die das Konto hat (principal.calendars()).

Der dritte Schnipsel wahrscheinlich nicht funktioniert, weil der Name (die Anzeigenamen Eigenschaft, nicht die URL-Pfad-Komponente) des Kalenders sehr wahrscheinlich nicht calendar_name ist aber so etwas wie Calendar. Theoretisch kann es sogar leer sein.

Um einen einzelnen Kalender mit seiner URL zugreifen dies funktionieren kann, versuchen Sie nicht:

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

Obwohl es vielleicht besser, so etwas wie dies aus verschiedenen Gründen zu tun:

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

zu adressieren Sie Ihre tatsächliche Frage, Sie müssen weitere Informationen hinzufügen. Wenn Sie die (relativ oder absolut) wollen URL des Kalenders, verwenden Sie so etwas wie dieses:

print calendar.url 

Wenn Sie den Kalender Anzeigename explizit abzurufen, kann diese Arbeit:

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

Hoffe, das hilft.

Verwandte Themen