PROJET AUTOBLOG


Sam & Max: Python, Django, Git et du cul

Site original : Sam & Max: Python, Django, Git et du cul

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

“C’est ton avis mec”

vendredi 28 février 2014 à 21:17

Oui connard, c’est mon avis. C’est mon compte twitter. C’est mon blog. C’est mon comment. Bien sûr que c’est mon avis. Bien sûr que c’est partial. Tu t’attendais à quoi ? Une déclaration de l’ONU ? Un truc lissé et sans couleur dont la lividité de la saveur n’a d’égale que l’aseptisation de la forme ?

Va te faire foutre.

Internet est fait pour ça. Internet est fait pour avoir de l’asymétrie et des surfaces rugueuses. Il est fait pour que les gens disent ce qu’ils pensent comme ils le pensent, pas comme on a envie de le lire.

Si ça ne te plait pas, c’est très simple, il suffit de bouger les cils. C’est pas un trop gros effort non ?

flattr this!

Le dossier sur la POO fait peau neuve

jeudi 27 février 2014 à 11:03

Je me répète, mais on doit énormément aux relecteurs sur ce blog. Ils ne font pas de bruit, mais ils passent derrière, tels des nettoyeurs de scènes de crimes sur notre prose sanglante.

Vous trouvez qu’il y a beaucoup de fautes sur le blog ? Imaginez si ils n’étaient pas là !

Comme le notre, leur boulot est 100% bénévole, et croyez-moi quand je vous dis que ça bouffe du temps.

Foxmask et Kontre sont les plus actifs, donc j’aimerais les remercier particulièrement.

Mais il y a aussi ceux qui font ça en comment, et Réchèr vient tout juste de terminer un travail de malade sur la relecture le l’INTEGRALITE (8 parties super longues) du dossier sur la POO.

Gloire aux relecteurs !

(Et vive le fromage)

flattr this!

Un planet Python Fr sur Sam et Max

mercredi 26 février 2014 à 10:22

Un planet, c’est une agrégation de flux RSS/Atom autour d’un sujet. Un planet Python Fr existe déjà sur l’AFPY, et il est à chier (no offense guys). On peut y lire beaucoup de news de l’AFPY et les état d’âmes de David Larlet, mais franchement question articles Python, on reste sur sa faim.

Du coup j’ai aggrégé toutes les sources Python Fr que j’avais sous la main.

Pour la veille informationelle, c’est beaucoup mieux. Certes, il y a encore du hors sujet, mais c’est le plus souvent des trucs que je lirais de toute façon.

On s’est mis dedans donc vous n’avez pas besoin de vous abonner aux deux.

flattr this!

Templite, le moteur de template Python qui tient dans un fichier

mardi 25 février 2014 à 11:34

pip install templite

from templite import Templite
 
template = """
This is the place where all the ${variable}$ go...
The time goes fast but everything is slow...
${for woho in whohos:}$
    ${woho}$
${:end-for}$
"""
 
t = Templite(template)
print t.render(variable="junkies", whohos=["woo hoo", "woo hoo", "woo hoo hoo hoo"])

Ce qui donne :

This is the place where all the junkies go...
The time goes fast but everything is slow...

    woo hoo

    woo hoo

    woo hoo hoo hoo

Je n’ai pas écrit templite, je l’ai juste mis sur pypi et github en respectant sa paternité car il restait sous forme de snippet perdu depuis trop longtemps.

Vous pouvez le piper mais vraiment, ce n’est pas obligatoire, comme peewee et bottle, il tient dans un fichier, donc on peut juste dumper le module dans son code source.

flattr this!

Petit snippet pour obtenir un nom de fichier unique en Python

lundi 24 février 2014 à 13:03

Bidouillerie du jour, bonjour.

import re
import os
 
def get_unique_path(path):
 
    # si le nom de fichier existe, on en cherche un autre
    while os.path.exists(path):
        # on vire l'extension
        base, ext = os.path.splitext(path)
        try:
            # on extrait le compteur si il existe
            base, counter, _ = re.split(r" \((\d+)\)$", base)
        except ValueError:
            counter = 0
 
        # on reconstruit le path
        path = "%s (%s)%s" % (base, int(counter) + 1, ext)
 
    return path

Le plus gros de l’astuce est dans :

base, counter, _ = re.split(r" \((\d+)\)$", base)

\((\d+)\)$ va matcher ‘espace(un nombre)’ à la fin d’une chaîne et r.split va retourner soit ['le chemin complet'] si il n’y a pas de compteur, soit ['base', 'compteur', ''] si il y en a un.

Du coup on unpack tout ça, _ étant utilisé pour signaler une variable inutilisée par convention et on a notre compteur, prêt à être incrémenté.

A l’usage, ça donne ça dans ipython :

>>> !rm /tmp/test*
>>> get_unique_path('/tmp/test.txt')
u'/tmp/test.txt'
>>> get_unique_path('/tmp/test.txt')
u'/tmp/test.txt'
>>> !touch /tmp/test.txt
>>> get_unique_path('/tmp/test.txt')
u'/tmp/test (1).txt'
>>> !touch "/tmp/test (1).txt"
>>> get_unique_path('/tmp/test.txt')
u'/tmp/test (2).txt'
>>> get_unique_path('/tmp/test (101).txt')
u'/tmp/test (101).txt'
>>> !touch '/tmp/test (101).txt'
>>> get_unique_path('/tmp/test (101).txt')
u'/tmp/test (102).txt'
>>> get_unique_path('/tmp/test')
u'/tmp/test'
>>> !touch /tmp/test
>>> get_unique_path('/tmp/test')
u'/tmp/test (1)'
>>> get_unique_path('/tmp/.test')
u'/tmp/.test'
>>> !touch "/tmp/.test"
>>> get_unique_path('/tmp/.test')
u'/tmp/.test (1)'
>>> get_unique_path('/tmp/test.path.text')
u'/tmp/test.path.text'
>>> !touch '/tmp/test.path.text'
>>> get_unique_path('/tmp/test.path.text')
u'/tmp/test.path (1).text'
>>> get_unique_path('/tmp/test.path (1)(1) (1).text')
u'/tmp/test.path (1)(1) (1).text'
>>> !touch '/tmp/test.path (1)(1) (1).text'
>>> get_unique_path('/tmp/test.path (1)(1) (1).text')
u'/tmp/test.path (1)(1) (2).text'

Bien entendu, si vos fichiers ne seront jamais visibles par l’utilisateur, il vaut mieux se simplifier la vie et utiliser uuid.uuid4().

Je pense qu’après le dossier sur les tests unitaires, je ferai un dossier regex. Aux alentours de 2018.

flattr this!

Error happened! 0 - count(): Argument #1 ($value) must be of type Countable|array, null given In: /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php:428 http://www.ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/?110 #0 /var/www/ecirtam.net/autoblogs/autoblogs/autoblog.php(999): VroumVroum_Blog->update() #1 /var/www/ecirtam.net/autoblogs/autoblogs/sametmaxcom_a844ada43a979e3b1395ab9acb6afafb84340999/index.php(1): require_once('...') #2 {main}