<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>XGENUS &#187; Python</title>
	<atom:link href="http://www.xgenus.com/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xgenus.com</link>
	<description>Vive le Libre</description>
	<lastBuildDate>Tue, 31 Jan 2012 21:47:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Automatisation de déploiement Android</title>
		<link>http://www.xgenus.com/2012/01/16/automatisation-de-deploiement-android/</link>
		<comments>http://www.xgenus.com/2012/01/16/automatisation-de-deploiement-android/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 21:27:07 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[Info]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[déploiement]]></category>

		<guid isPermaLink="false">http://www.xgenus.com/?p=114</guid>
		<description><![CDATA[J&#8217;ai longtemps cherché pour le travail à configurer des téléphones Android de façon automatique. Il n&#8217;y a pas d&#8217;outils de déploiement professionnel ou je n&#8217;en ai pas trouvé. Des produits payant comme Afaria de Sybase existe, mais eux même sont soumis à l&#8217;immense diversité d&#8217;Android. Le scripting python apporte souvent des solutions. Sur Android, il [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai longtemps cherché pour le travail à configurer des téléphones Android de façon automatique. Il n&#8217;y a pas d&#8217;outils de déploiement professionnel ou je n&#8217;en ai pas trouvé.<br />
Des produits payant comme Afaria de Sybase existe, mais eux même sont soumis à l&#8217;immense diversité d&#8217;Android.</p>
<p>Le scripting python apporte souvent des solutions. Sur Android, il existe <a href="http://code.google.com/p/android-scripting/">SL4A</a> (Scripting Layer for Android) qui permet en effet de coder rapidement de petites choses. Mais rien pour contrôler d&#8217;autres applications ou paramètres du système. On peut rapidement s&#8217;amuser avec la webcam pour scanner des codes barres, appeler des webservices, etc&#8230;</p>
<p>J&#8217;ai cherché à regarder du côté de la ligne de commande avec adb (Android Debug Bridge) qui permet d&#8217;installer des applications, de les lancer ou encore d&#8217;avoir un shell (plus que limité si on a pas rooté son téléphone).</p>
<p>J&#8217;ai aussi essayé le développement d&#8217;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.<br />
On est dans un environnement comme chrooté, et on ne peut ouvrir la base Sqlite d&#8217;une autre application.</p>
<p>En continuant dans la piste du dévelopement, j&#8217;ai trouvé <a href="http://code.google.com/p/robotium/">Robotium</a> qui permet enfin d&#8217;avoir des résulats intéressant avec la grosse limite qu&#8217;on ne peut l&#8217;utiliser que sur ses propres applications. On peut aussi automatiser d&#8217;autres applications en changeant les certificats de l&#8217;APK et en les remplaçant par les siens. J&#8217;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&#8217;utilisateur, récupération des paramètres du compte mail de l&#8217;utilisteur et remplissage des valeurs avec la simulation de clique (un peu comme avec AutoIt sous windows)</p>
<p>Après avoir fini le travail, j&#8217;ai trouvé <a href="http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html">MonkeyRunner</a> qui permet en python de simuler des cliques et la frappe clavier, le lancement d&#8217;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&#8217;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&#8217;écran et de l&#8217;analyse d&#8217;image&#8230; </p>
<p>Bref, on peut faire des choses pour automatiser mais c&#8217;est loin d&#8217;être une solution d&#8217;entreprise pour gérer le déploiement d&#8217;un parc de téléphone.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xgenus.com/2012/01/16/automatisation-de-deploiement-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agréger des documents Word en python</title>
		<link>http://www.xgenus.com/2011/11/02/agreger-des-documents-word-en-python/</link>
		<comments>http://www.xgenus.com/2011/11/02/agreger-des-documents-word-en-python/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 10:06:25 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[word]]></category>

		<guid isPermaLink="false">http://www.xgenus.com/?p=98</guid>
		<description><![CDATA[Voici 2 petits scripts pour facilement agréger des documents Word d&#8217;un répertoire (ne fonctionne que sous windows&#8230;) Pour ce faire, il faut d&#8217;abord avoir la liste des documents et les ordonner. Pour éviter d&#8217;avoir à faire une interface graphique on va générer une liste en texte que l&#8217;on modifiera avant de lancer le traitement. Script [...]]]></description>
			<content:encoded><![CDATA[<p>Voici 2 petits scripts pour facilement agréger des documents Word d&#8217;un répertoire (ne fonctionne que sous windows&#8230;)</p>
<p>Pour ce faire, il faut d&#8217;abord avoir la liste des documents et les ordonner.<br />
Pour éviter d&#8217;avoir à faire une interface graphique on va générer une liste en texte que l&#8217;on modifiera avant de lancer le traitement.</p>
<p><strong>Script 1 (nommé _make_list.py par exemple ) :</strong></p>
<pre class="brush:py">
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") &gt; 0:
print "\t%s" % i
f.write("%s\n" % i)
f.close()
</pre>
<p>Il génère le fichier _todo.txt connenant la liste des fichiers docx. Vous pouvez le modifier et l&#8217;ordonner comme vous le souhaitez.</p>
<p><strong>Script 2 (nommé _agreg.py) :</strong></p>
<pre class="brush:py">
import win32com.client
import os</code>

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)
</pre>
<p>Si vous avez Python installé mais aussi pywin32 (disponible sur <a href="http://sourceforge.net/projects/pywin32/files/pywin32/">http://sourceforge.net/projects/pywin32/files/pywin32/</a>)<br />
Vous verrez Word s&#8217;ouvrir et ajouter les documents un à un.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xgenus.com/2011/11/02/agreger-des-documents-word-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XmlRPC en python et OpenERP</title>
		<link>http://www.xgenus.com/2009/12/07/xmlrpc-en-python-et-openerp/</link>
		<comments>http://www.xgenus.com/2009/12/07/xmlrpc-en-python-et-openerp/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 19:07:22 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[OpenERP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.xgenus.com/?p=32</guid>
		<description><![CDATA[Il est très facile d&#8217;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, [...]]]></description>
			<content:encoded><![CDATA[<p>Il est très facile d&#8217;interagir avec OpenERP grâce aux requêtes xmlrpc.<br />
Ex de code en python :</p>
<pre>#!/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 " &gt;&gt; ", row, "\n\n"</pre>
<p>On peut faire en xmlrpc tout ce qu&#8217;on peut faire avec le client lourd ou web.<br />
On peut voir avec le mode debug du client lourd observer les requêtes et leurs résultats (cf : <a href="http://www.openerp.com/forum/post47115.html?sid=4e83cd21190ce368079c783d6b216726">http://www.openerp.com/forum/post47115.html?sid=4e83cd21190ce368079c783d6b216726</a>)</p>
<p>Sous linux :</p>
<pre>openerp-client -l dump_rpc</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xgenus.com/2009/12/07/xmlrpc-en-python-et-openerp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contrôler les Oracle VM en XML-RPC</title>
		<link>http://www.xgenus.com/2009/11/16/controler-les-oracle-vm-en-xml-rpc/</link>
		<comments>http://www.xgenus.com/2009/11/16/controler-les-oracle-vm-en-xml-rpc/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 10:12:48 +0000</pubDate>
		<dc:creator>jeff</dc:creator>
				<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[OraVM]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://www.xgenus.com/?p=14</guid>
		<description><![CDATA[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 [] =&#62; 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'] =&#62; 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'] =&#62; 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'] =&#62; success:vnc_port=5901 Il ne reste plus qu&#8217;à faire [...]]]></description>
			<content:encoded><![CDATA[<p>Il est possible de contrôler les Hyperviseurs Oracle en XML-RPC.</p>
<p>Voici quelques exemples de commande :<br />
<code><br />
/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_get_vm_names<br />
xen_get_vm_names [] =&gt;<br />
success:vm_names=OVM-TEST,OVM_MANAGER</code></p>
<p>/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_get_vm_path OVM-TEST<br />
xen_get_vm_path ['OVM-TEST'] =&gt;<br />
success:path=/OVS/remote/OVM-TEST</p>
<p>/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<br />
xen_migrate_vm ['/OVS/remote/OVM-TEST', 'IP_DE_LA_VM'] =&gt;<br />
success:target_host=IPdelHYPERVISEUR</p>
<p>/opt/ovs-agent-2.2/utils/do_rpc.py https://oracle:motdepasse@IPdelHYPERVISEUR:8899 xen_get_vnc_port /OVS/remote/OVM-TEST<br />
xen_get_vnc_port ['/OVS/remote/OVM-TEST'] =&gt;<br />
success:vnc_port=5901</p>
<p>Il ne reste plus qu&#8217;à faire une interface web ou graphique de gestion plus légère que l&#8217;Oracle VM Manager <img src='http://www.xgenus.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.xgenus.com/2009/11/16/controler-les-oracle-vm-en-xml-rpc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

