Client Picasa pour N900

English: Nokia N900 smartphone (display shows ...
Image via Wikipedia

Le N900 dispose d’une grande capacité de stockage (27 Go) mais cela n’élude pas le besoin de sauvegarde externe qui peut se faire par un script utilisant rsync automatisé par alarmed ou bien par l’utilitaire Caritang qui permet de transférer les médias (photo et vidéo) sur Picasa.

Nous nous intéressons au cas où les médias sont archivés sur Picasa. La consultation des médias ne peut pas se faire aisément sur le terminal. En effet, la version complète utilise un style d’affichage prévu pour les écrans d’ordinateur et non pas pour le petit écran du N900. De plus l’utilisation des javascript mettent déjà à mal la puissance faiblarde du N900 dont le CPU plafonne à 600 Mhz (voire 800 Mhz par overclocking) et l’avènement de nouvelles technologies telles que HTML5 vont rendre le navigateur du N900 inopérant sur les nouveaux sites. Finalement l’utilisation de la version web de picasa n’est donc pas une solution viable.

Un client spécific permettrait d’utiliser correctement les possibilités du terminal (écran, cpu) afin de rendre accessible les média archivés. Mais il semble que ce besoin n’ait pas eu d’écho dans la communauté des développeurs Maemo5: il n’y a pas d’application cliente Picasa pour le N900 ! Alors j’en ai développé une: Gnatirac. Gnatirac utilise le binding python de l’API Gdata pour Picasa Web et permet de naviguer dans les albums et les photos d’un compte picasa. Voilà, le N900 dispose de son client Picasa.

Google Data API 2.0.15 et Maemo5 en python

.AVI en el N900Maegen, une application de généalogie pour Maemo5/N900 utilise le service googlecode de google pour la soumission de bug. Pour cela Maegen se base sur la librairie gdata fournie par google. Le code de rapport de bug a été écrit il y a plus d’un an et suppose que la version de gdata soit la 2.0.9 alors que la version courante est la 2.0.15

Ayant testé Maegen sur des machines différentes sur lesquelles des versions récentes de gdata étaient installées, je pensais qu’une dépendance de type au moins la 2.0.9 était une solution valable. Cela donne dans le fichier setup.py

setup(... install_requires=["gdata>=2.0.9"], ...)

Tout semblait marcher correctement puisque à la fois sur le terminal et les machines de développement (Virtual Appliance Maemo SDK), Maegen s’executait correctement, jusqu’à ce que je décide de passer sur une machine vierge (Virtual Appliance Maemo SDK) où jamais gdata n’avait été installé. Et là ce fut le drame, Maegen ne fonctionnait plus. La faute à gdata introuvable.

Une première solution est provoquer l’installation des dépendances. Pour cela se mettre sous l’environnement de compilation croisée

scratchbox

puis se placer dans le répertoire du projet

cd workspace/maegen

et enfin lancer une installation

python2.5 setup.py install

Lorsque les lignes cabalistiques ont fini de défiler, on remarque que gdata 2.0.15 a été installé. Le lancement de Maegen echoue cette fois sur l’absence du paquet json !

D’où vient le problème ? En regardant la version de gdata sur les machine où Maegen fonctionne, je remarque alors une différence: c’est la 2.0.14. Je désinstalle donc gdata 2.0.15 et installe la 2.0.14 à partir des sources dans scratchbox et là le miracle se produit: Maegen reprend vie !

En comparant le module gdata.gauth.py entre la 2.0.14 et la 2.0.15, on constate que des tentatives d’imports de json sont effectués à partir de la ligne 64 et finalement suppose que python 2.6 est utlisé en essyant un ultime import json, ce qui malheureusement échouera lamentablement sur le N900 qui ne dispose que de python 2.5 !

Voilà, le mystère est résolu, à moins de rajouter une dépendance vers json, je doit me résoudre à ne pas utliser la dernière version de gdata. Pour cela la directive de dépendance dans le fichier setup.py devient:

install_requires=["gdata>=2.0.9, <=2.0.14"]

En conclusion, les dépendances externes doivent être utiliser avec parcimonie et on doit éviter les dépendances ouvertes en leur préférant une dépendance exacte si possible. En effet moins il y a de dépendance, plus l’application est autonome et légère avec des risque de conflit de version en moins. De plus les dépendances ouvertes ouvrent la porte à une régression apportée par une nouvelle version.

Upload de vidéo sur Picasa en python

L’utilitaire caritang a pour objectif de permettre la sauvegarde des documents du N900 vers google docs. Mais il s’avère que picasa est plus adapté pour les média enregistrés avec la caméra du terminal qu’il s’agisse de photo ou de vidéo.

L’api gdata en version 2.0.9 permet depuis python de manipuler un compte picasa. Malheureusement la version de l’api picasa implémenté est la 1.0 alors que la 2.0 qui n’existe pas en python est la seule qui autorise l’envoi de vidéo.

Une impasse pour les vidéo ? Non, car le mécanisme d’envoi de vidéo est en fait, d’après la documentation de la 2.0, similaire à celui des photos modulo le type mime. Un test en utilisant le binding python officiel et en passant le type mime video/mp4 montre que le module gdata.photos.service vérifie que le type mime est bien une photo.

C’est la que la nature dynamique de python nous sauve. Il suffit de changer la liste (supposée être une constante) des type de fichier autorisés.

gdata.photos.service.SUPPORTED_UPLOAD_TYPES = gdata.photos.service.SUPPORTED_UPLOAD_TYPES + ("mp4",)

Dans la cas particulier du N900 l’obtention du type mime par la module mimetools echoue sur les mp4. Là encore on peut ajouter le type mime video/mp4 au module par une instruction

mimetypes.add_type("video/mp4", ".mp4")

Upload de vidéo sur Picasa en python

L’utilitaire caritang a pour objectif de permettre la sauvegarde des documents du N900 vers google docs. Mais il s’avère que picasa est plus adapté pour les média enregistrés avec la caméra du terminal qu’il s’agisse de photo ou de vidéo.

L’api gdata en version 2.0.9 permet depuis python de manipuler un compte picasa. Malheureusement la version de l’api picasa implémentée est la 1.0 alors que la 2.0 qui n’existe pas en python est la seule qui autorise l’envoi de vidéo.

Une impasse pour les vidéo ? Non, car le mécanisme d’envoi de vidéo est en fait, d’après la documentation de la 2.0, similaire à celui des photos modulo le type mime. Un test en utilisant le binding python officiel et en passant le type mime video/mp4 montre que le module gdata.photos.service vérifie que le type mime est bien une photo.

C’est la que la nature dynamique de python nous sauve. Il suffit de changer la liste (supposée être une constante) des type de fichier autorisés.

gdata.photos.service.SUPPORTED_UPLOAD_TYPES = gdata.photos.service.SUPPORTED_UPLOAD_TYPES + ("mp4",)

Dans la cas particulier du N900 l’obtention du type mime par le module mimetools echoue sur les mp4. Là encore on peut ajouter le type mime video/mp4 au module par une instruction

mimetypes.add_type("video/mp4", ".mp4")