pygtk: como pedir confirmación al usuario

A veces en una aplicación PyGT necesitamos pedir al usuario que nos confirme una acción, con esta pequeña función tendremos la solución. Se le pasa como parámetros el texto a monstrar y el título de la ventana.

def pedir_confirmacion(texto,titulo):
    dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL,gtk.MESSAGE_INFO, gtk.BUTTONS_YES_NO,texto)
    dialog.set_title(titulo)
    response = dialog.run()
    dialog.destroy()
    if response == gtk.RESPONSE_YES:
        print "A respondido que sí!"
        return True
    else:
        print "A respondido que no!"
        return False

Vía ubuntu forums

Notas sobre programación de aplicaciones de escritorio en python: teoría y práctica

Alguna vez he programado alguna cosa en pygtk por divertimento. Una vez tuve que adaptar el instalador de Ubuntu (ubiquity) para un proyecto del trabajo y me tocó pelearme otra vez con python+gtk. Ahora quería mirar una manera sería de hacer desarrollos de aplicaciones de escritorios en python GTK, así que lo primero es recopilar información y este ha sido e resultado:

Continue reading

Como modificar entradas LDAP desde python

En un server que corre Zenntyal necesitaba cambiar el interprete de comandos que se les habñia asignado a todos los usuarios creados en el LDAP. Para ello me he decidido a usar python (porque es lo que mejor controlo y por el magnífico interprete iPython). El resultado a sido este:

#importamos el módulo LDAP y nos conectados
import ldap
l = ldap.initialize('ldap://localhost')
l.simple_bind('cn=ebox,dc=cajacomun,dc=es','misecreto')

#importamos modlist y creamos el cambio
from ldap import modlist
old = {'loginShell':'/bin/false'}
new = {'loginShell':'/bin/bash'}
cambios = modlist.modifyModlist(old,new)

#buscamos personas y aplicamos el cambio
for person in l.search_s('ou=Users,dc=cajacomun,dc=es',ldap.SCOPE_SUBTREE,'(uid=*)',['loginshell']):
    print person
    l.modify_s(person[0],cambios)

Más info:

Empaquetado deb rápido y sucio de aplicaciones python

Ieup,

Toca mini-receta basado en el artículo de David en la web de crysol.

  1. Necesitamos un fichero setup.py. Si el software no lo trae deberemos crearlo nosotros.
  2. creamos el dir debian: mkdir debian
  3. Creamos el fichero debian/control:

  4. 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.

  5. Creamos el rules (ojo, tiene que ser ejecutable chmod +x debian/rules):

  6. #!/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

  7. 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.

Como procesar un fichero .changes de un paquete debian

Buenas,

Si queremos procesar un fichero .changes de un paquete debian es tan sencillo como:

  1. Quitarle la firma
  2. 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 🙂

Howto parse a debian changes file in python

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