Post

Accès calendrier en ligne de commande (python)

calendrier sur serveur caldav

Accès calendrier en ligne de commande (python)

calendar-cli

Avoir la possibilité de consulter , ajouter et effacer des événements d’un calendrier dans un serveur caldav

Les dépendances

icalendar library - https://pypi.python.org/pypi/icalendar :
sudo pip2 install icalendar
caldav library - [[https://pypi.python.org/pypi/caldav]] :
sudo pip2 install caldav
tzlocal
sudo pip2 install tzlocal

Installation calendar-cli

Installation calendar-cli
cd ~/scripts
git clone https://github.com/tobixen/calendar-cli
Création d’un lien nommé calendarcmd
sudo ln -s /home/yannick/scripts/calendar-cli/calendar-cli.py /usr/local/bin/calendarcmd

Le fichier de configuration ~/.config/calendar.conf au format json
nano ~/.config/calendar.conf

1
2
3
4
5
6
{ "default": 
  { "caldav_url": "http://foo.bar.example.com/caldav/", 
    "caldav_user": "luser",
    "caldav_pass": "insecure"
  }
}

Les droits sur le fichier de configuration
chmod 0600 ~/.config/calendar.conf

Les tests

Ajout événement au calendrier à une date et heure précises ,de durée 2 heures
calendarcmd calendar add '2016-05-18 11:45:00+2h' 'Test calendrier en ligne de commande'
Réponse
`Added event with uid=0261bdcc-1c4a-11e6-9702-048d38375cb8

Lecture agenda à partir du 17 mai 2016 de 14 jours (17 au 30 mai)
calendarcmd calendar agenda --from-time=2016-05-17 --agenda-days=14
Réponse
2016-05-18 11:45 (Wed) Test calendrier en ligne de commande
2016-05-30 07:30 (Mon) SSL Letsencrypt
Lecture agenda à partir du 17 mai 2016 de 14 jours (17 au 30 mai) ,affichage identifiant uid
calendarcmd calendar agenda --from-time=2016-05-17 --agenda-days=14 --event-template='{dstart} {uid}'
Réponse
2016-05-18 11:45 (Wed) 0261bdcc-1c4a-11e6-9702-048d38375cb8
2016-05-30 07:30 (Mon) 3976d023-1e86-4454-9387-fd2152b84973

Multiples calendriers

Dans le fichier de configuration ~/.config/calendar.conf ,on peut définir plusieurs calendriers

1
2
3
4
5
6
7
8
9
10
11
{ "default": 
  { "caldav_url": "http://foo.bar.example.com/caldav/", 
    "caldav_user": "luser",
    "caldav_pass": "insecure"
  },
  "yannick": 
  { "caldav_url": "http://other.domain.tld/caldav/", 
    "caldav_user": "otheruser",
    "caldav_pass": "otherinsecure"
  }
}

La commande calendarcmd utilise la configuration default et pour une autre , utiliser l’option –config-section ,exemple:
calendarcmd calendar --config-section=yannick agenda --from-time=2016-05-17 --agenda-days=14

Affichage jour mois dans la langue locale

Par défaut les jours sont affichés en abrégé et en anglais , il faut ajouter 2 lignes au programme calendar-cli.py pour un affichage dans la langue locale
Ajouter à la suite de la déclarationimport sys

1
2
3
4
5
[...]
# Afficher dans la langue locale
import locale
locale.setlocale(locale.LC_TIME, "")
[...]

On reprend l’exemple :
Lecture agenda à partir du 17 mai 2016 de 14 jours (17 au 30 mai) ,affichage identifiant uid
calendarcmd calendar agenda --from-time=2016-05-17 --agenda-days=14 --event-template='{dstart} {uid}'
Réponse
2016-05-18 11:45 (mer.) 0261bdcc-1c4a-11e6-9702-048d38375cb8
2016-05-30 07:30 (lun.) 3976d023-1e86-4454-9387-fd2152b84973
Le jour est affiché dans la la langue locale (français)

On peut donc améliorer l’affichage en précisant le format de sortie avec l’option –timestamp-format
Avec la date du jour de l’appel au calendrier –from-time=$(date +’%Y-%m-%d’)
calendarcmd calendar --config-section=yannick agenda --timestamp-format='%a %d %b %Y %H:%M' --from-time=$(date +'%Y-%m-%d')
Ce qui donne pour exemple
jeu. 19 mai 2016 13:45 Ajout au calendrier yannick

Cet article est sous licence CC BY 4.0 par l'auteur.