paste-py - La documentation
Tu as toujours tout voulu savoir sur comment utiliser paste ? Tu t'es toujours dit qu'un script pour paster directement depuis la ligne de commande serait utile ? Ou qu'un accès en « raw » serait pratique pour pouvoir télécharger directement les paste ? Alors ce document est fait pour toi.
Table of Contents
1 Utilisation
L'interface web de paste est très simple d'utilisation, mais elle contient un bon nombre de features cachées, que personne n'a l'air de connaître. Après avoir lu cette section, paste n'aura plus aucun secret pour toi.
1.1 Coloration syntaxique
La coloration syntaxique se choisit très facilement dans l'énorme
liste sur l'interface web. Si néanmoins tu as oublié de la
sélectionner, ou que tu t'es trompé, tu peux toujours la changer par
après. Pour cela tu n'as qu'à ajouter où changer le paramètre &hl
dans l'URL.
Par exemple, si par malheur tu as sélectionné « Python 3.0 Traceback » pour un paste en Python, tu te retrouves avec l'URL suivante:
http://paste.awesom.eu/HiT&hl=py3tb
Pour obtenir la bonne coloration syntaxique, tu n'as qu'à changer le
py3tb en python:
http://paste.awesom.eu/HiT&hl=python
Et voilà.
1.2 Raw-mode
Si jamais l'envie te viens de vouloir télécharger un paste (avec
wget, fetch, curl, …), prends soin d'ajouter le paramètre
&raw à l'url, pour obtenir le contenu du paste uniquement, et pas
toute la page bourrée d'html au milieu du paste.
1.3 Users
Grâce à xarch, paste inclut un système d'utilisateurs qui permet de
retrouver facilement ses pastes. Pour paster avec un user, tu indiques
ton p'tit nom dans le champ « User » de l'interface web. Si jamais tu
veux accéder à la liste des paste que tu as fait avec cet user, tu vas
sur http://paste.awesom.eu/user/tonptinom/. Attention, tout le monde
y a accès, donc ne paste pas des trucs trop sensibles :)
1.4 Script
Si tu as envie de vite paster un fichier sans devoir l'ouvrir, le copier, le coller dans l'interface web et appuyer sur le bouton, tu peux utiliser le script paste.sh (à condition que tu aies curl d'installé). Son fonctionnement est très simple: tu l'appelles avec le nom du fichier à paster en argument et il te retourne l'URL du paste.
NougatRillettes a fait quelques ajouts au niveau du script: tu peux
spécifier l'user en troisième argument (le second argument étant le
langage), ou bien même mettre un user par défaut en dur dans le
script. Le script peut aussi utiliser xclip ou xsel pour copier
l'url de ton paste dans ton presse-papier. Bref pour ça, tu ouvre le
paste.sh avec ton éditeur favori et tu regarde les premières lignes.
1.5 mldown
Il y a eu, pendant un court moment, une option pour formatter un paste
avec mldown. Hélas un jour mldown s'est mis à fonctionner bizarrement
et l'option a donc été désactivée. Il est toujours possible de
l'activer en changeant la variable mldown_path dans paste.py, mais
ça n'a pas été testé depuis un certain temps donc le fonctionnement
n'est pas garanti.
2 Installation
Si jamais tu as envie de faire tourner paste sur ton serveur, c'est très simple. Au niveau des dépendances, tu as besoin de:
Tu peux installer ça via le gestionnaire de paquet de ta
distribution ou si tu as les setuptools de python d'installé, via
easy_install:
easy_install tornado pygments
Ensuite, récupère les sources de paste-py depuis le git (ou télécharge une snapshot du dépôt):
git clone git://github.com/acieroid/paste-py.git
Et pour lancer (ça listen sur le port 8888):
mkdir pastes/ python paste.py
Si tu veux des « jolies » URL comme sur http://paste.awesom.eu, il
faut que tu mettes la variable production à True dans paste.py,
et que tu aies un serveur web qui rewrite certaines choses. Dans mon
cas, c'est du russe, et la configuration (nginx.conf) ressemble à
ça:
server {
server_name paste.awesom.eu;
access_log /var/log/nginx/paste.awesom.eu-access_log;
error_log /var/log/nginx/paste.awesom.eu-error_log;
location ~ ^(.*)/paste.css {
root /usr/home/paste/paste-py/;
}
location ~ ^(.*)/favicon.ico {
root /usr/home/paste/paste-py/;
}
location / {
rewrite ^/$ / break;
rewrite ^/user/([^/]+)$ /?user=$1 break;
rewrite ^/user/([^/]+)/([^&]+)?&(.*)$ /?id=$1/$2&$3 break;
rewrite ^/([^&]+)&(.*)$ /?id=$1&$2 break;
rewrite ^/(.*)$ /?id=$1 break;
proxy_pass http://localhost:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}
Et tu peux même utiliser le script daemonize.py (mais il faudra
sûrement l'adapter au niveau des chemins) si tu veux lancer paste.py
en daemon.
3 Fonctionnement
Le fonctionnement de paste est très simple: lorsqu'un nouveau paste est soumis, on génère un nom aléatoire (ici de trois lettres/chiffres, ce qui est largement suffisant: 238328 noms disponibles, alors qu'on est en dessous des 3000 pastes au total aujourd'hui) et on écrit le paste dans le fichier portant ce nom. Ainsi pour retrouver un paste c'est très simple, on lit le fichier correspondant au nom du paste demandé. Ainsi, pas besoin de base de donnée ou de mécanisme compliqué.
Quand l'user d'un paste est spécifié, on mets le fichier du paste dans
le sous-dossier qui porte le nom de l'user, et on fait donc bien gaffe
qu'il n'y ait pas de caractères sensible genre des /.
4 Performances
Il fut un temps où paste-py utilisait wsgi et gunicorn, mais
maintenant il utilise tornado, ce qui lui permet d'avoir un bon petit
boost au niveau des performances. En effet, sur les gros paste, wsgi
avait tendance à ramer et répondre avec un débit ridicule (en dessous
des 20ko/s). Avec un petit coup de siege, on voit que tornado se
débrouille beaucoup mieux, autant sur les petit pastes que sur les
gros. Les deux résultats suivants ont étés obtenus en laissant tourner
siege avec l'option b pendant 100 secondes.
Avec un paste de trois caractères:
| Tornado | WSGI + gunicorn (3 workers) | |
|---|---|---|
| Transactions | 30934 hits | 6401 hits |
| Availability | 100.00% | 100.00% |
| Elapsed time | 100.03 secs | 100.00 secs |
| Data transferred | 12.07 MB | 2.62 MB |
| Response time | 0.05 secs | 0.23 secs |
| Transaction rate | 309.24 trans/sec | 64.01 trans/sec |
| Throughput | 0.12 MB/sec | 0.03 MB/sec |
| Concurrency | 14.74 | 14.45 |
| Successful transactions | 30934 | 6401 |
| Failed transactions | 0 | 0 |
| Longest transaction | 0.39 | 1.48 |
| Shortest transaction | 0.00 | 0.01 |
Avec un paste de 6.2Mo (récupéré ici):
| Tornado | WSGI + gunicorn (3 workers) | |
|---|---|---|
| Transactions | 107 hits | 9 hits |
| Availability | 100.00 % | 20.00 % |
| Elapsed time | 100.00 secs | 100.02 secs |
| Data transferred | 675.49 MB | 2.96MB |
| Response time | 12.64 secs | 34.09 secs |
| Transaction rate | 1.07 trans/sec | 0.09 trans/sec |
| Throughput | 6.75 MB/sec | 0.03 MB/sec |
| Concurrency | 13.52 | 3.07 |
| Successful transactions | 107 | 9 |
| Failed transactions | 0 | 36 |
| Longest transaction | 13.77 | 37.62 |
| Shortest transaction | 0.97 | 0.00 |
5 FAQ
5.1 À l'aide ! Il n'y a pas de coloration syntaxique pour le langage X
La coloration syntaxique se fait au travers de pygments, donc si ton langage préféré n'est pas supporté, va d'abord voir s'il est supporté par pygments. Si ce n'est pas le cas, c'est chez eux qu'il faut aller se plaindre. Si par contre c'est supporté, ping moi et je mettrais à jour pygments sur le serveur où tourne paste.
6 Contact
Pour me contacter, tu /query acieroid sur epiknet ou freenode, tu
m'hl sur un chan quelconque où je suis, ou tu m'envoie un mail à
acieroid@awesom.eu.
Date: 2011-08-25 14:53:24 CEST
HTML generated by org-mode 6.33x in emacs 23