Python⚓︎
Voisinage⚓︎
2022-08
Lorsqu’on parcoure une liste, il est parfois utile d’avoir accès à l’élément précédent et au suivant, pour faire par exemple des liens suivant/précédent entre des billets de blog.
Cette implémentation permet de spécifier le premier et le dernier item de la liste au besoin, ce qui permet de lier vers d’autres contenus par exemple.
iterable
peut être une liste, un set ou toute structure… itérable !
Tout se passe au moment du yield
, on garde en mémoire le
précédent et le courant lors du parcours de l’itérateur et… on n’oublie
pas le dernier !
Lister des dossiers/fichiers⚓︎
2022-08
Il est courant en Python de devoir parcourir des fichiers ou des dossiers. Ces deux méthodes permettent de récupérer les chemins des dossiers ou des fichiers à partir d’une racine.
- Le paramètre de
pattern
est bien pratique pour ne récupérer que des*.md
par exemple.
Générer un md5⚓︎
2022-08
Parce que j’oublie à chaque fois comment faire…
md5.py | |
---|---|
Il y aurait probablement de meilleurs algorithmes à utiliser selon les cas.
Générer une chaîne de 128 bits⚓︎
2022-08
Pour avoir des slugs dans une URL par exemple.
128bits-string.py | |
---|---|
Pour un usage réel, il faudrait exclure certains caractères qui peuvent prêter à confusion. Mais qui dicte des URLs ?
2022-12
Une autre façon de générer des tokens aléatoires :
Générer une data URI⚓︎
2022-08
Il est possible de transformer des images en chaîne de caractère afin de les insérer directement dans le HTML.
data-uri.py | |
---|---|
Utiliser des ULID (vs. UUID)⚓︎
2022-09
Pour obtenir de l’unicite (pour des clés primaires par exemple), mieux que des UUID, il y a les ULID :
- Spécification
- Bibliothèque en Python
- Une autre bibliothèque en Python
- Un article sur les différences/avantages
Récupérer la valeur epoch depuis une date ISO⚓︎
Parce que j’ai été surpris que ce soit aussi compliqué. Je suis peut-être passé à côté d’un truc plus élégant…
to-epoch.py | |
---|---|
- Désactivation de black : on veut faire rentrer le code dans la page manuellement.
TODO
Configurer black
pour avoir des lignes plus courtes par défaut.
Mot de passe à usage unique⚓︎
2022-10
Un bout de code qui vient de SourceHut pour générer un mot de passe à usage unique basé sur le temps.
Je ne comprends pas tout mais j’espère pouvoir m’en resservir un jour (et le comprendre à ce moment là…).
La version anglaise que je ne me risque pas à frangliser :
The algorithm is as follows:
- Divide the current Unix timestamp by 30
- Encode it as a 64-bit big endian integer
- Write the encoded bytes to a SHA-1 HMAC initialized with the TOTP shared key
- Let offs = hmac[-1] & 0xF
- Let hash = decode hmac[offs .. offs + 4] as a 32-bit big-endian integer
- Let code = (hash & 0x7FFFFFFF) % 1000000
- Compare this code with the user’s code
You’ll need a little dependency to generate QR codes with the otpauth:// URL scheme, a little UI to present the QR code and store the shared secret in your database, and a quick update to your login flow, and then you’re good to go.
This implementation has a bit of a tolerance added to make clock skew less of an issue, but that also means that the codes are longer-lived.
Installer un paquet depuis une branche distante avec pip⚓︎
2023-01
Il est possible d’installer un paquet depuis une branche distante avec l’utilitaire pip
avec cette ligne de commande :
C’est très pratique pour donner du feedback sur une pull-request par exemple :
Ou pour installer la dernière version de la branche principale :
Faire des requêtes HTTP en Python sans lib⚓︎
2023-01
J’ai découvert cela grâce au AdvancedRestClient qui propose des exemples de code en Python pour reproduire les requêtes réalisées via l’outil, dont une version avec les batteries inclues :
Je ne l’ai pas encore utilisé car je favorisais jusqu’à présent HTTPX qui est maintenu par des personnes en qui j’ai confiance.
Tâches asynchrones⚓︎
2022-09
Surtout des liens vers les projets existants dont j’ai toujours du mal à me rappeler :
- RQ (Redis Queues) : is a simple Python library for queueing jobs and processing them in the background with workers.
- Procrastinate : PostgreSQL-based Task Queue for Python
- wakaq : Distributed background task queue for Python backed by Redis, a super minimal Celery
- Dramatiq : Dramatiq is a background task processing library for Python with a focus on simplicity, reliability and performance.
- huey : a lightweight alternative.
- Nameko : A microservices framework for Python that lets service developers concentrate on application logic and encourages testability.
- Background Tasks : Starlette includes a BackgroundTask class for in-process background tasks. A background task should be attached to a response, and will run only once the response has been sent.
- Chard : is a very simple async/await background task queue for Django. One process, no threads, no other dependencies.
Pour jouer⚓︎
2022-11