pasteque/using.fr.md

4.1 KiB

Paf'Py

Et PAF !

Envoyer un ou plusieurs fichiers

En utilisant des requêtes multipart/form-data il est possible d'envoyer un fichier :

$ curl http://localhost:8000/ -Fmanage.py=@manage.py
| URL                     |   size | filename  |
|-------------------------|--------|-----------|
| https://p.afpy.org/g3LE |    251 | manage.py |

ou plusieurs fichiers en même temps :

$ curl http://localhost:8000/ -Fmanage.py=@manage.py -Frequirements.txt=@requirements.txt
| URL                     |   size | filename         |
|-------------------------|--------|------------------|
| https://p.afpy.org/g3LE |    251 | manage.py        |
| https://p.afpy.org/k4oT |    547 | requirements.txt |

C'est l'extension dans le nom du fichier qui permet de choisir la coloration syntaxique pour chaque fichier.

Envoyer dans le corps d'une requête

Il est possible de coller un unique fichier via le corps d'une requête POST :

$ cal | curl -XPOST --data-binary @- http://localhost:8000/
| URL                     |   size | filename |
|-------------------------|--------|----------|
| https://p.afpy.org/mo8X |    184 | request  |

Dans ce cas, il est possible de choisir la coloration syntaxique via l'entête Content-Type :

$ cal | curl -XPOST -H "Content-Type: text/plain" --data-binary @- http://localhost:8000/
| URL                     |   size | filename    |
|-------------------------|--------|-------------|
| https://p.afpy.org/dNuo |    184 | request.txt |

Fonction bash

Pour ceux qui ne souhaitent pas rédiger des requêtes curl toute la journée, voici une petite fonction bash :

paf()
{
    if [[ $# == 0 ]]
    then
        curl https://p.afpy.org/ --data-binary @- -H "Content-Type: text/plain"
    else
        curl https://p.afpy.org/ "${@/*/-F&=@&}"
    fi
}

Cette fonction est capable d'envoyer un fichier :

$ paf manage.py
| URL                     |   size | filename  |
|-------------------------|--------|-----------|
| https://p.afpy.org/g3LE |    251 | manage.py |

plusieurs fichiers :

$ paf *.py
| URL                     |   size | filename              |
|-------------------------|--------|-----------------------|
| https://p.afpy.org/bvRV |    188 | admin.py              |
| https://p.afpy.org/5uei |    296 | context_processors.py |
| https://p.afpy.org/Xg5a |   1419 | models.py             |
| https://p.afpy.org/GkGS |    309 | urls.py               |
| https://p.afpy.org/LVXL |   2730 | views.py              |

et même de lire sur stdin :

$ cal | paf
| URL                     |   size | filename    |
|-------------------------|--------|-------------|
| https://p.afpy.org/dNuo |    184 | request.txt |

Dernière démo, puisque le résultat d'un envoi est un tableau de toutes les URL, il est tentant de le partager lui aussi :

$ paf *.py | paf
| URL                     |   size | filename    |
|-------------------------|--------|-------------|
| https://p.afpy.org/L5pc |    488 | request.txt |

Ce qui donne :

$ curl https://p.afpy.org/L5pc
| URL                     |   size | filename              |
|-------------------------|--------|-----------------------|
| https://p.afpy.org/7rFj |    188 | admin.py              |
| https://p.afpy.org/DLfp |    296 | context_processors.py |
| https://p.afpy.org/9o33 |      0 | __init__.py           |
| https://p.afpy.org/YdvG |   1419 | models.py             |
| https://p.afpy.org/97fG |    309 | urls.py               |
| https://p.afpy.org/oPRr |   2974 | views.py              |

pratique pour partager tout un dossier.

Accès aux collages

Chaque collage peut-être consulté dans un navigateur (où il est présenté avec de la coloration syntaxique : https://p.afpy.org/g3LE), ou être consulté en ligne de commande (où il est délivré brut) :

$ curl https://p.afpy.org/g3LE
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "webtools.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)