Ieup,
Toca mini-receta basado en el artículo de David en la web de crysol.
- Necesitamos un fichero setup.py. Si el software no lo trae deberemos crearlo nosotros.
- creamos el dir debian: mkdir debian
- Creamos el fichero debian/control:
Source: hola-pythoneros
Section: utils
Priority: optional
Maintainer: Juan Nadie <juan.nadie@loquesea.es>
Build-Depends: debhelper (>= 5.0.38)
Build-Depends-Indep: cdbs (>= 0.4.43), python-all-dev (>= 2.3.5-11), python-central (>= 0.5.6)
Standards-Version: 3.7.2
XS-Python-Version: all
Package: hola-pythoneros
Architecture: all
Depends: ${python:Depends}
XB-Python-Version: ${python:Versions}
Description: Ejemplo básico de script Python empaquetado en Debian GNU/Linux
Un script "hola mundo" que sirve únicamente para explicar cómo se
empaquetan scripts Python en GNU/Linux de forma adecuada.
- Creamos el rules (ojo, tiene que ser ejecutable
chmod +x debian/rules):
#!/usr/bin/make -f
DEB_PYTHON_SYSTEM=pycentral
DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/python-distutils.mk
- Creamos el debian/changelog :
dch --create
Con esto tenemos lo ultrabásico para poder compilar el paquete deb: dpkg-buildpackage
Es una manera sucia de empaquetar algo (es más una nota mental para mi que un howto) y para que el paquete sea medio decente hay que hacer muchas más cosas
Leeros el articulo de David que es más completo.
Share on Facebook
Buenas,
Si queremos procesar un fichero .changes de un paquete debian es tan sencillo como:
- Quitarle la firma
- Procesar el contenido con una librería de yaml, por ejemplo syck
En código sería lo siguiente:
import os
import GnuPGInterface
import syck
changes_file = '/tmp/factoriapegaso-panel_0.2.6-4_amd64.changes'
gnupg = GnuPGInterface.GnuPG()
ciphertext = open(changes_file).read()
p2 = gnupg.run(['--decrypt'], create_fhs=['stdin', 'stdout'])
p2.handles['stdin'].write(ciphertext)
p2.handles['stdin'].close()
decrypted_plaintext = p2.handles['stdout'].read()
p2.handles['stdout'].close()
#Puede fallar por no tener la llave GPG
try:
p2.wait()
except:
pass
changes_info = syck.load(decrypted_plaintext)
print "tenemos:"
print changes_info
No es lo mas elegante del mundo, solo una prueba de concepto
Share on Facebook
Firts post in English (just a test
. If yo want to parse a debian package changes file in python is so easy as:
import os
import GnuPGInterface
import syck
changes_file = '/tmp/factoriapegaso-panel_0.2.6-4_amd64.changes'
gnupg = GnuPGInterface.GnuPG()
ciphertext = open(changes_file).read()
p2 = gnupg.run(['--decrypt'], create_fhs=['stdin', 'stdout'])
p2.handles['stdin'].write(ciphertext)
p2.handles['stdin'].close()
decrypted_plaintext = p2.handles['stdout'].read()
p2.handles['stdout'].close()
#Puede fallar por no tener la llave GPG
try:
p2.wait()
except:
pass
changes_info = syck.load(decrypted_plaintext)
print "tenemos:"
print changes_info
Share on Facebook
Ieup,
Otra pildorita de python. Siempre hechaba de menos una orden de control delflujo del tipo switch de PHP. Hasta ahora siempre hacía un sucio hack con if-s anidados (si asi de WTF es uno
). Pero hoy, cansado ya y con necesidad urgente he rebuscado en san google y he econtrando que se puede hacer tan sencillo como mapeanda funciones a valores en un array. Sacado del blog de Simon Willson :
#Definimos las funciones
def alerta(texto):
print "ALERTA: %s"%texto
def farsa(texto):
print "FARSA: %s"%texto
#Definimos el array mapeador
case = {
'a': alerta,
'f': farsa
}
variable='a'
print variable
case[variable]("lala")
print "Ahora cambiamos"
variable='f'
print variable
case[variable]("lele")
Share on Facebook
Python mola! Necesitaba añadir a un guión python el recibir un parametro del tipo –parametro valor. He mirado la referencia de python (ya sabeis, hay que mantenerla siempre debajo de la almohada
y voila! optparser al rescate. A sido tan sencillo como:
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-c", "--config",action="store", type="string", dest="configfile")
(options, args) = parser.parse_args()
#Es oblligatorio indicar el fichero de configuración
if not options.configfile:
print "Falta indicar el fichero de configuración"
exit()
#esperamos 2 parámetros libres
if len(args) != 2:
print "Faltan parametros"
exit()
Espero que a alguna le sirva. Sino sirva como nota mental
Agur.
Share on Facebook
Ya hablé sobre python y dbus hace un tiempo. Ahora vamos a aprender como atender a las señales que se mandan a través de este bus de escritorio. En el interesante tutorial de Pidgin tenemos un buen ejemplo. En este ejemplo se va a atender a la señal que emite pidgin cuando algún amigo se conecta. En el ejemplo de la web se lanza una ventana de notificación.
#!/usr/bin/env python
import dbus, gobject, dbus.glib
# Initiate a connection to the Session Bus
bus = dbus.SessionBus()
# Associate Pidgin's D-Bus interface with Python objects
obj = bus.get_object(
"im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
pidgin = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
# Create a global Pidgin buddy data cache
buddy_data_cache = {}
def onSignOn(bId):
# Extract a Pidgin buddy's name and alias
buddyAlias = pidgin.PurpleBuddyGetAlias(bId)
buddyName = pidgin.PurpleBuddyGetName(bId)
# Generate notification text based on the buddy's name and alias
print "Se ha conectado: %s"%(buddyName)
# Bind the onSignOn function with Pidgin's BuddySignedOn event
bus.add_signal_receiver(onSignOn,
dbus_interface="im.pidgin.purple.PurpleInterface",
signal_name="BuddySignedOn")
# Start the main loop
gobject.MainLoop().run()
Como veis es bastante sencillo. Iniciamos un bus de sessión. Obtenemos el objeto de purple (el servicio de pidgin). Creamos una función (onSigOn) que será la que se lance cuando ocurra la señal. Y ya solo nos queda unir esta función con la señal con el método add_signal_receiver. ¿Sencillo no? Como mola python
Para otro día dejo la parte final, crear un “servidor” que se conecte a dbus y atienda peticiones a través de el.
Share on Facebook