Rikiki, le "plus petit wiki du monde en python" (ou pas)

Je me suis trouvé un nouveau défi: faire un tout petit wiki.

C’est désormais chose faite : Il pourrait être “le plus petit code source de wiki du monde en python3” (laissez moi y croire 5 minutes :wink: ) avec ses 532 octets.

Il obéit à quelques contraintes de base pour tout wiki :

  • Génération automatique de lien : Toute chaîne de caractères en CamelCase est transformée en lien vers une nouvelle page.
  • Contenu éditable par tout le monde : Aucune sécurité, toute page affiche sa source qui peut être modifiée.
  • Contenu facilement éditable ; C’est du texte brut, hormis les sauts de ligne qui font un paragraphe et donc les liens vers les autres pages à mettre en CamelCase.
  • Rétro-liens : Si une page A pointe vers une page B, cette dernière affichera automatiquement un lien vers la page A.

screenshot

Le code source pour les curieux :

#!/usr/bin/env python3
import cgi,json as j,re as r
p,s,c=map(cgi.parse().get,"psc")
p,o=p[0],open
s and o(p,"w").write(s[0])
o(p,"a");o("b","a")
l,k,v=j.loads(o("b").read()or"{}"),r"(([A-Z][\w]+){2})",r"<a href=?p=\1>\1</a>"
c=s[0] if s else o(p).read()
l[p]=[x[0] for x in r.findall(k,c)]
h=r.sub(k,v,c,r.M)
h=r.sub(r"\n","<p>",h,r.M)
j.dump(l,o("b","w"))
print('Content-Type: text/html\n\n%s<form method=POST><textarea name=s>%s</textarea><input type=submit></form>'%(h,c))
[n==p and print(r.sub(k,v,m)) for m in l for n in l[m]]
4 « J'aime »

Ah, je viens de réussir à le faire passer à 511 octets, je suis sous la barre des 512 octets, je suis joie.

Je mettrai le code à jour ce soir.

Dans le print( content type ) avec des fstrings tu gagnes un car :rofl:

1 « J'aime »

J’en gagne même 3 j’ai l’impression ! Merci :heart:

dépôt à jour : 507 octets :wink:

dépôt à jour : 469 octets :exploding_head:

Super! pour ceux qui ne connaissent pas les incantations necessaires, il faut

Ou plutôt lire le README à côté qui explique tout ? :wink:

1 « J'aime »

Comme le dis la PEP 8, la lisibilité ça compte de temps en temps :smiley:

Du coup, @Mindiell tu peux gagner une espace avant les deux for et le if vu qu’ils sont précédés de crochet ou parenthèse.