Articles avec le tag ‘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

Contrôler les Oracle VM en XML-RPC

Il est possible de contrôler les Hyperviseurs Oracle en XML-RPC.

Voici quelques exemples de commande :

/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_get_vm_names
xen_get_vm_names [] =>
success:vm_names=OVM-TEST,OVM_MANAGER

/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_get_vm_path OVM-TEST
xen_get_vm_path ['OVM-TEST'] =>
success:path=/OVS/remote/OVM-TEST

/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_migrate_vm /OVS/remote/OVM-TEST IP_DE_LA_VM
xen_migrate_vm ['/OVS/remote/OVM-TEST', 'IP_DE_LA_VM'] =>
success:target_host=IPdelHYPERVISEUR

/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_get_vnc_port /OVS/remote/OVM-TEST
xen_get_vnc_port ['/OVS/remote/OVM-TEST'] =>
success:vnc_port=5901

Il ne reste plus qu’à faire une interface web ou graphique de gestion plus légère que l’Oracle VM Manager :-)

Pages
Catégories