Parsing JSON en Python

Poster un commentaire

Sur de vieux serveurs où l’on ne peut plus installer de packages (c’est du vécu, pas plus tard qu’hier) ou si l’on souhaite limiter le nombre de bibliothèques Python à installer, on peut parser simplement du JSON avec le bout de code suivant :

def parse_json(expression):
    try:
        return eval(expression, {}, {'null': None, 'true': True, 'false': False})
    except Exception, e:
        raise Exception("Error evaluating expression '%s': %s" % (expression, e))

Bien sûr, cela ne vaut une bibliothèque dédiée, mais ça aide…

Décorateur Django pour accès super user

Poster un commentaire

Il est souvent pratique de n’autoriser l’accès à une méthode d’une vue Django qu’aux seuls super utilisateurs. Pour ce faire, on pourra utiliser le décorateur suivant :

    def super_user(function):
        """Decorator to grant access to super user only."""
        def decorator(request):
            if not request.user.is_superuser:
                raise PermissionDenied("Must be superuser to get configuration")
            return function(request)
        return decorator

Ainsi, la fonction foo() d’une vue ne sera accessible qu’à un super utilisateur si on la décore avec la fonction super_user :

    @super_user
    def foo():
        pass

Enjoy!

Lister les projets d’un repository CVS

Poster un commentaire

cvs -d :ext:foo@rubyforge.org:/var/cvs/bar rdiff -s -D "1/1/2037"

Requête HTTP en Python

Poster un commentaire

J’ai eu aujourd’hui besoin de réaliser des requêtes HTTP en Python en contrôlant finement tous les paramètres de la requête (URL bien sûr, mais aussi la méthode, les en-têtes et le corps) et les valeurs de retour (le statut, le message, le corps et les en-têtes). N’ayant rien trouvé répondant à mon besoin, j’ai dû développer ma propre fonction qui pourrait se rendre utile à l’occasion :

import httplib

def http_request(host, path='/', method='GET', body=None, headers={}):
    connection = httplib.HTTPConnection(host)
    connection.request(method, path, body, headers)
    response = connection.getresponse()
    headers = {}
    pairs = response.getheaders()
    if pairs:
        for pair in pairs:
            headers[pair[0]] = pair[1]
    return {'body': response.read(),
        'status': response.status,
        'headers': headers,
        'message': response.reason}

# exemple de requête à Google
response = http_request('google.com')
print "%s %s" % (response['status'], response['message'])
print "Location: %s" % response['headers']['location']

Ce qui donne :

301 Moved Permanently
Location: http://www.google.com/

On lui passe l’hôte et le port à appeler (par exemple foo:8080), le chemin de l’URL (comme /index.html), la méthode (GET, POST, PUT, DELETE ou autre), le corps et les en-têtes (sous la forme d’un dictionnaire). La méthode renvoie un dictionnaire qui contient les entrées body, status, headers et message.

Enjoy!

Une 2CV au prix d’une Ferrari ?

Poster un commentaire

Mon joli MacBook Pro a flanché ce soir : la machine a commencé par planter de temps en temps, puis sont apparus des artefacts graphiques, et maintenant elle plante systématiquement au bout de cinq minutes.

Je me suis renseigné sur le net et il semble que ce problème soit connu : les cartes graphiques des MacBook Pro de 2007 équipés d’une ATI XT1600 finissent par griller. Le problème c’est qu’Apple ne veut pas reconnaître le soucis et demande un prix exorbitant pour changer la carte mère.

Quand on achète une machine à 2500 €, on s’attend à ce que le hardware soit irréprochable et que la machine dure plus de trois ans ! Or, d’après certains contributeurs des forums, ce problème pourrait être dû à un assemblage de mauvaise qualité de la carte graphique (pâte thermique mal appliquée ou même bouts de scotch obstruant les évents d’aération).

Je commence à me demander si je n’aurais pas acheté une 2CV au prix d’une Ferrari !

Si ce problème n’est pas résolu dans de bonnes conditions, je crois que ce MacBook risque d’être la dernière machine Apple que j’aurai acheté.

Taxinomie des pathologies des informaticiens

5 Commentaires

Depuis quelques temps au boulot, j’ai l’impression de me trouver dans un asile d’aliénés : un Napoléon en réunion, un Jésus en séminaire, un Hitler à la pause café. Je réalise que le petit monde de l’informatique est rempli d’illuminés de toutes sortes dont voici une rapide taxinomie :

L’AGILISTE

Ces gens pensent que leur méthode de travail va rendre les développeurs, les clients et les chefs heureux. La mise en pratique aveugle de l’agilité conduit souvent à l’exacte contraire : les développeurs passent leur temps en réunion, les chefs attendent leur démo et le client se tire.
Leitmotiv : le client n’est pas agile.

L’ORIENTÉ OBJET

Pour lui, tout doit être objet. Le moindre bout de code doit comporter au moins une classe, sinon c’est l’excommunication. Le mot script est pour eux une insulte et en écrire est dégoutant. J’aime prendre un malin plaisir à les outrer en leur disant "qui a dit que tout devait être objet ?".
Leitmotiv : ce n’est pas objet !

LE RESTFOUL

Il pense que HTTP, protocole de transfert pour l’hyper-texte écrit dans les années 90, est parfaitement adapté pour effectuer du RPC sur HTTP et n’en démord pas. Il est l’ennemi juré de SOAP et en tire une certaine aura, à raison.
Leitmotiv : au début, il y avait quatre verbes : GET, POST, PUT et DELETE.

LE PATTERNISTE

Pour lui tout est pattern. Et si ça ne l’est pas, il faut en inventer une ! Ainsi, il y a des gens qui inventent des patterns tous les jours et des sites qui répertorient leurs précieuses créations.
Leitmotiv : tu connais la pattern de la mouche qui zozotte ?

LE FOU DE JAVA

Son dieu est James Gosling qui l’a sauvé des affres du C++. Java devrait être partout, du serveur au téléphone mobile. D’ailleurs, Java est bien plus qu’un langage, c’est une plateforme. De plus, c’est le standard, ne pas choisir Java, c’est un peu punk ! Si vous voulez l’énerver, parlez lui des performances de Java, effet garanti.
Leitmotiv : write once, run everywhere !

L’ADORATEUR DES EJB

Pour lui, des gens doivent écrire des composants, assemblés en belles et grandes applications par un deuxième larron et configurées par un troisième. Le tout doit tourner dans de gros serveurs Oracle sur du matos Sun. Inutile de dire que les seuls qui y croient encore sont des employés d’Oracle !
Leitmotiv : il faut écrire au minimum deux interfaces et une implémentation.
Leitmotiv 2 : la prochaine version des EJB, c’est de la balle !

LE FAN DE L’IOC

Ils pensent que faire un new, c’est mal. En lieu et place, ils préfèrent écrire un élément dans un fichier XML de 3000 lignes et injecter le résultat à l’aide d’une annotation. C’est sûr, c’est mieux !
Leitmotiv : on sait jamais, si on change d’implémentation…

LE PROSÉLITE DE MAVEN

Maven est le standard, point. Si on lui dit que Maven est lent, il répond que Maven est le standard. Si on lui dit que Maven ne marche pas, il répond que Maven est le standard. Si on lui dit que Maven vomit sur la console des tonnes d’infos inutiles, il répond que Maven est le standard. Bref, toute discussion est inutile. D’ailleurs Maven a déjà gagné.
Leitmotiv : il faut écrire un plugin pour faire ça !

LE LISPIEN

Lisp est le meilleur langage de programmation. Il a été écrit dans les années 50, mais on n’a jamais fait mieux et on ne fera jamais mieux, et on peut le prouver. C’est peut être vrai, mais on n’a utilisé du Lisp à grande échelle que dans Emacs, alors les Lispiens sont condamnés à arrêter la programmation ou être Richard Stallman (et le poste est déjà pourvu).
Leitmotiv : le code c’est des données et inversement.

L’EXTREME XML

XML c’est cool, il faut en mettre partout, par milliers de lignes. XML c’est sérieux, il y a les DTD, les XSD et les XSLT. En plus, les éléments avec des attributs dedans, c’est joli. De toute manière, vous n’avez pas le choix, c’est ça ou SGML…
Leitmotiv : comment ça verbeux ?
Leitmotiv 2 : YAML ? C’est quoi ?

EN GUISE DE CONCLUSION

Tout le monde s’est forcément reconnu dans l’une ou l’autre de ces caricatures. Pour ma part, j’ai été un fou de Java de 1996 à 2004 avant de réaliser que le meilleur spécialiste de Java qui ne connait qu’un seul langage ne sera jamais qu’un mauvais développeur.

Il est clair qu’aucune techno ou méthode n’est un marteau doré qui répond à tous les besoins. Inversement, on a naturellement tendance à promouvoir ce que l’on maitrise.

La solution est évidente : maitriser un maximum de langages et techniques de programmation et les mettre en oeuvre à bon escient. Cela conduit certains (dont je fais partie, et je ne suis pas le seul) à apprendre un nouveau langage chaque année et à essayer de le mettre en oeuvre.

Si cette bonne pratique tombe sous le sens, elle est loin d’être encouragée. J’ai observé à plus d’une occasion que l’on préfère les discours des Ayatollah aux approches pragmatiques basées sur l’expérimentation et les résultats concrets. J’ai presque l’impression que la mise en oeuvre de dogmes passe avant la rentabilité.

Traduction en ligne de commande

Poster un commentaire

J’ai longtemps cherché un script de traduction à lancer depuis la ligne de commande, sans succès. J’ai donc fini par développer le mien, basé sur l’API Google de traduction :

Usage: traduire.py [-h] [-s source] [-t target] phrase à traduire
-h         Afficher cette page d'aide.
-s source  Langue source (au format ISO 'fr', 'en'.. 'en' par défaut).
-t target  Langue target (au format ISO 'fr', 'en'.. 'fr' par défaut).

On peut télécharger ce script à cette adresse : http://cafebabe.free.fr/arc/traduire.py.

Enjoy!

Entrées Précédentes

Suivre

Recevez les nouvelles publications par mail.