Archive pour la catégorie ‘Python’
Automatisation de déploiement Android
J’ai longtemps cherché pour le travail à configurer des téléphones Android de façon automatique. Il n’y a pas d’outils de déploiement professionnel ou je n’en ai pas trouvé.
Des produits payant comme Afaria de Sybase existe, mais eux même sont soumis à l’immense diversité d’Android.
Le scripting python apporte souvent des solutions. Sur Android, il existe SL4A (Scripting Layer for Android) qui permet en effet de coder rapidement de petites choses. Mais rien pour contrôler d’autres applications ou paramètres du système. On peut rapidement s’amuser avec la webcam pour scanner des codes barres, appeler des webservices, etc…
J’ai cherché à regarder du côté de la ligne de commande avec adb (Android Debug Bridge) qui permet d’installer des applications, de les lancer ou encore d’avoir un shell (plus que limité si on a pas rooté son téléphone).
J’ai aussi essayé le développement d’application pour simuler des touches ou des cliques. De rare code source sont disponible mais non fonctionnel. Les fonctions ou librairies ayant disparu des versions plus récente du SDK. On peut avec des Intent ouvrir des Activity mais bon rien de nouveau à adb.
On est dans un environnement comme chrooté, et on ne peut ouvrir la base Sqlite d’une autre application.
En continuant dans la piste du dévelopement, j’ai trouvé Robotium qui permet enfin d’avoir des résulats intéressant avec la grosse limite qu’on ne peut l’utiliser que sur ses propres applications. On peut aussi automatiser d’autres applications en changeant les certificats de l’APK et en les remplaçant par les siens. J’ai pu ainsi avoir une version de K9Mail qui me permettait une auto-configuration de compte mail IMAP directement lié à notre gestion de parc. Le principe est simple, récupération du numéro de série du téléphone, récupération de l’utilisateur, récupération des paramètres du compte mail de l’utilisteur et remplissage des valeurs avec la simulation de clique (un peu comme avec AutoIt sous windows)
Après avoir fini le travail, j’ai trouvé MonkeyRunner qui permet en python de simuler des cliques et la frappe clavier, le lancement d’Activity directement depuis le PC lié au téléphone (le python étant en fait éxécuté en Jython avec les outils google). Plus besoin de modifier des applications (qui n’est pas toujours possible surtout avec les ROM de certains constructeurs/opérateurs) mais on a pas la même souplesse. On ne peut pas attendre une boite de dialogue, ou alors en faisant une copie d’écran et de l’analyse d’image…
Bref, on peut faire des choses pour automatiser mais c’est loin d’être une solution d’entreprise pour gérer le déploiement d’un parc de téléphone.
Agréger des documents Word en python
Voici 2 petits scripts pour facilement agréger des documents Word d’un répertoire (ne fonctionne que sous windows…)
Pour ce faire, il faut d’abord avoir la liste des documents et les ordonner.
Pour éviter d’avoir à faire une interface graphique on va générer une liste en texte que l’on modifiera avant de lancer le traitement.
Script 1 (nommé _make_list.py par exemple ) :
import os
path = os.getcwd()
l = os.listdir(path)
f = open("%s/_todo.txt" % path, 'w')
print "Create _todo.txt"
for i in l:
if i.find(".docx") > 0:
print "\t%s" % i
f.write("%s\n" % i)
f.close()
Il génère le fichier _todo.txt connenant la liste des fichiers docx. Vous pouvez le modifier et l’ordonner comme vous le souhaitez.
Script 2 (nommé _agreg.py) :
import win32com.client
import os
path = os.getcwd()
l = os.listdir(path)
f = open("%s/_todo.txt" % path, 'r')
t = f.readlines()
f.close()
word = win32com.client.Dispatch("Word.Application") # Create new Word Object
doc = word.Documents.Add()
word.Visible = True
doc.Range(0,0).Select()
sel = word.Selection
for i in t:
file = path + "\\" + i.replace('\n', '')
print "Open file :", file
sel.InsertFile(file)
sel.Collapse(0)
sel.InsertBreak()
sel.Collapse(0)
Si vous avez Python installé mais aussi pywin32 (disponible sur http://sourceforge.net/projects/pywin32/files/pywin32/)
Vous verrez Word s’ouvrir et ajouter les documents un à un.
XmlRPC en python et OpenERP
Il est très facile d’interagir avec OpenERP grâce aux requêtes xmlrpc.
Ex de code en python :
#!/usr/bin/python
import xmlrpclib
import sys
username = 'admin' #the user
pwd = 'admin' #the password of the user
dbname = 'demo' #the database
sock_common = xmlrpclib.ServerProxy ('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
search = sock.execute(dbname, uid, pwd, 'res.partner', 'search', [])
print "search", search
read = sock.execute(dbname, uid, pwd, 'res.partner', 'read', search)
print "read", read
for row in read:
print " >> ", row, "\n\n"
On peut faire en xmlrpc tout ce qu’on peut faire avec le client lourd ou web.
On peut voir avec le mode debug du client lourd observer les requêtes et leurs résultats (cf : http://www.openerp.com/forum/post47115.html?sid=4e83cd21190ce368079c783d6b216726)
Sous linux :
openerp-client -l dump_rpc