From d8a24e210fc6de7241255c4cf711e1a34d2fd296 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Thu, 27 Mar 2014 18:29:06 +0100 Subject: [PATCH] Add ljdc (les joies du code) generator --- dynastie/generators/ljdc.py | 85 +++++++ dynastie/sites/blog.soutade.fr/_generators | 9 + dynastie/sites/blog.soutade.fr/_ljdc.html | 13 ++ dynastie/sites/blog.soutade.fr/_ljdc.xml | 244 ++++++++++++++++++++ dynastie/sites/blog.soutade.fr/css/ljdc.css | 32 +++ dynastie/templates/search_blog.html | 24 ++ misc/ljdc.perl | 95 ++++++++ 7 files changed, 502 insertions(+) create mode 100755 dynastie/generators/ljdc.py create mode 100755 dynastie/sites/blog.soutade.fr/_generators create mode 100644 dynastie/sites/blog.soutade.fr/_ljdc.html create mode 100644 dynastie/sites/blog.soutade.fr/_ljdc.xml create mode 100644 dynastie/sites/blog.soutade.fr/css/ljdc.css create mode 100644 dynastie/templates/search_blog.html create mode 100755 misc/ljdc.perl diff --git a/dynastie/generators/ljdc.py b/dynastie/generators/ljdc.py new file mode 100755 index 0000000..74bdaaa --- /dev/null +++ b/dynastie/generators/ljdc.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +""" + Copyright 2012-2014 Grégory Soutadé + + This file is part of Dynastie. + + Dynastie is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Dynastie is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Dynastie. If not, see . +""" +import os +from xml.dom.minidom import parse, parseString +import xml.parsers.expat +from dynastie.generators.generator import DynastieGenerator +from dynastie.generators.index import Index +from django.db import models + +class LJDC(Index): + + cur_page = 0 + nb_pages = 0 + cur_post = 0 + posts_per_page = 20 + filename = 'index' + dirname = '/ljdc' + cur_category = None + + def createPost(self, posts, dom, post_elem, root): + new_elem = self.createElement(dom, 'ljdc') + + address = self.cur_post_obj.getElementsByTagName('address')[0] + a = dom.createElement('a') + a.setAttribute('href', address.childNodes[0].nodeValue) + + title_value = self.cur_post_obj.getElementsByTagName('title')[0] + title = self.createElement(dom, 'title', title_value.childNodes[0].nodeValue) + a.appendChild(title) + + img_src = self.cur_post_obj.getElementsByTagName('img')[0] + img = dom.createElement('img') + img.setAttribute('src', img_src.childNodes[0].nodeValue) + + a.appendChild(img) + + new_elem.appendChild(a) + + self.cur_post_obj = None + + return new_elem + + def generate(self, blog, src, output): + from dynastie.models import Post, Blog, Category + + name = '_ljdc.xml' + if not os.path.exists(src + '/%s' % name): + self.addWarning('No %s found, exiting' % name) + return None + + try: + srcdom = parse(src + '/%s' % name) + except xml.dom.DOMException as e: + self.addError('Error parsing %s : ' + e) + return None + + posts = srcdom.getElementsByTagName("entry") + + dom = self.parseTemplate(blog, src, output, 'ljdc', 'ljdc') + if dom is None: return self.report + + self.generatePages(dom, posts, src, output, 'ljdc') + + if not self.somethingWrote: + self.addReport('Nothing changed') + + return self.report + diff --git a/dynastie/sites/blog.soutade.fr/_generators b/dynastie/sites/blog.soutade.fr/_generators new file mode 100755 index 0000000..16985e9 --- /dev/null +++ b/dynastie/sites/blog.soutade.fr/_generators @@ -0,0 +1,9 @@ +post +index +category +tag +archive +atom +rss +all_posts +ljdc \ No newline at end of file diff --git a/dynastie/sites/blog.soutade.fr/_ljdc.html b/dynastie/sites/blog.soutade.fr/_ljdc.html new file mode 100644 index 0000000..69d6e55 --- /dev/null +++ b/dynastie/sites/blog.soutade.fr/_ljdc.html @@ -0,0 +1,13 @@ + + + + + + +

Best of les joies du code

+ + +
+
diff --git a/dynastie/sites/blog.soutade.fr/_ljdc.xml b/dynastie/sites/blog.soutade.fr/_ljdc.xml new file mode 100644 index 0000000..7f09366 --- /dev/null +++ b/dynastie/sites/blog.soutade.fr/_ljdc.xml @@ -0,0 +1,244 @@ + + + + + 79348684503 +
http://lesjoiesducode.fr/post/79348684503/quand-je-commence-a-developper-sous-linux-apres
+ quand je commence à développer sous Linux après plusieurs années passées sous Windows + http://ljdchost.com/Ma1feZq.gif +
+ + 79169643105 +
http://lesjoiesducode.fr/post/79169643105/quand-un-proche-me-demande-encore-une-fois-de-reparer
+ quand un proche me demande encore une fois de "réparer son Facebook" + http://ljdchost.com/MxFZvNI.gif +
+ + 78753329421 +
http://lesjoiesducode.fr/post/78753329421/la-dev-team-quand-la-mise-en-prod-fonctionne-du-premier
+ la dev team quand la mise en prod fonctionne du premier coup + http://ljdchost.com/iQybVzt.gif +
+ + 76430309812 +
http://lesjoiesducode.fr/post/76430309812/quand-git-blame-balance-qui-a-ecrit-le-code-que-la
+ quand "git blame" balance qui a écrit le code que la team a passé 2 jours à debugger + http://ljdchost.com/ibz52ZxNgAM2oA.gif +
+ + 76414125378 +
http://lesjoiesducode.fr/post/76414125378/la-difference-entre-lintitule-du-stage-et-le-stage-en
+ la différence entre l'intitulé du stage et le stage en question + http://ljdchost.com/ScSsJaG.gif +
+ + 74262291448 +
http://lesjoiesducode.fr/post/74262291448/quand-je-prends-en-charge-le-support-utilisateur
+ quand je prends en charge le support utilisateur + http://ljdchost.com/iREPuffTNOthP.gif +
+ + 74168932838 +
http://lesjoiesducode.fr/post/74168932838/quand-je-developpe-une-appli-facebook-et-que-le-boss
+ quand je développe une appli Facebook et que le boss jette un oeil à mon écran + http://ljdchost.com/zjik30m.gif +
+ + 73935666374 +
http://lesjoiesducode.fr/post/73935666374/quand-le-sysadmin-a-mal-configure-le-proxy
+ quand le sysadmin a mal configuré le proxy + http://ljdchost.com/o5LbzNy.gif +
+ + 73394310782 +
http://lesjoiesducode.fr/post/73394310782/quand-mon-pc-rame-sans-raison-et-que-jai-des-choses
+ quand mon PC rame sans raison et que j'ai des choses urgentes à faire + http://ljdchost.com/i2rMts44clHLw.gif +
+ + 72660713690 +
http://lesjoiesducode.fr/post/72660713690/quand-je-cache-des-bugs-au-chef
+ quand je cache des bugs au chef + http://ljdchost.com/dBATah1.gif +
+ + 69485497531 +
http://lesjoiesducode.fr/post/69485497531/quand-les-collegues-se-ramassent-sur-un-projet-sur
+ quand les collègues se ramassent sur un projet sur lequel je ne travaille pas + http://i.imgur.com/4YwDi.png +
+ + 68966745060 +
http://lesjoiesducode.fr/post/68966745060/quand-je-teste-une-requete-sql-monstrueuse-et-que-je
+ quand je teste une requête SQL monstrueuse et que je m'aperçois que j'ai oublié une parenthèse + http://ljdchost.com/7ZGdjjk.gif +
+ + 68348831778 +
http://lesjoiesducode.fr/post/68348831778/quand-je-publie-une-appli-jeu-concours-qui-a-ete-teasee
+ quand je publie une appli jeu-concours qui a été teasée à mort + http://ljdchost.com/ibgETFO7jGDq2n.gif +
+ + 67562114278 +
http://lesjoiesducode.fr/post/67562114278/quand-la-nouvelle-developpeuse-casse-mon-code
+ quand la nouvelle développeuse casse mon code + http://ljdchost.com/gtXEh5k.gif +
+ + 66175879670 +
http://lesjoiesducode.fr/post/66175879670/quand-un-collegue-fait-un-force-commit-de-son-code
+ quand un collègue fait un force commit de son code "testé" + http://ljdchost.com/17ZvQW7.gif +
+ + 65985797316 +
http://lesjoiesducode.fr/post/65985797316/quand-je-tente-de-faire-adopter-de-nouvelles
+ quand je tente de faire adopter de nouvelles technologies à mon boss + http://ljdchost.com/2yLYnwm.gif +
+ + 65325325887 +
http://lesjoiesducode.fr/post/65325325887/premier-jour-de-production-de-lappli
+ premier jour de production de l'appli + http://ljdchost.com/h72rDqA.gif +
+ + 65028123102 +
http://lesjoiesducode.fr/post/65028123102/quand-je-lance-un-script-sensible-en-prod
+ quand je lance un script sensible en prod + http://ljdchost.com/SQ23RQv.gif +
+ + 62889465788 +
http://lesjoiesducode.fr/post/62889465788/quand-mes-15-lignes-de-code-font-buguer-les-5000-codees
+ quand mes 15 lignes de code font buguer les 5000 codées par mon collègue + http://ljdchost.com/i1iPnQGiNMMcS.gif +
+ + 62226484904 +
http://lesjoiesducode.fr/post/62226484904/quand-jevite-de-justesse-une-integration-sous-ie
+ quand j'évite de justesse une intégration sous IE + http://ljdchost.com/ibrcM4QCUzuO4F.gif +
+ + 61755928134 +
http://lesjoiesducode.fr/post/61755928134/a-chaque-fois-que-je-dois-corriger-un-bug
+ à chaque fois que je dois corriger un bug + http://ljdchost.com/ibwJNFK7KOextP.gif +
+ + 61095633488 +
http://lesjoiesducode.fr/post/61095633488/quand-on-teste-la-release-pour-la-premiere-fois
+ quand on teste la release pour la première fois + http://ljdchost.com/iNBfqcRWVujkK.gif +
+ + 60257064090 +
http://lesjoiesducode.fr/post/60257064090/quand-le-chef-me-surveille-de-loin-sur-mon-pc
+ quand le chef me surveille de loin sur mon PC + http://ljdchost.com/rJoXjxb.gif +
+ + 55159334107 +
http://lesjoiesducode.fr/post/55159334107/quand-la-concurrence-nous-rend-visite-sur-un-salon
+ quand la concurrence nous rend visite sur un salon + http://ljdchost.com/UA3XKTA.gif +
+ + 54659996060 +
http://lesjoiesducode.fr/post/54659996060/quand-le-sysadmin-passe-par-lopen-space-pour-rebooter
+ quand le sysadmin passe par l'open space pour rebooter un serveur crashe par l'applicatif + http://ljdchost.com/Oxdx7cS.gif +
+ + 53193488681 +
http://lesjoiesducode.fr/post/53193488681/quand-je-montre-au-stagiaire-comment-devrait-se-passer
+ quand je montre au stagiaire comment devrait se passer une mise en prod + http://ljdchost.com/iOON215zIRp7s.gif +
+ + 52787691243 +
http://lesjoiesducode.fr/post/52787691243/quand-je-pense-que-ma-correction-est-passee-en-prod
+ quand je pense que ma correction est passée en prod alors que je suis en local + http://ljdchost.com/uP2Urzr.gif +
+ + 50079464381 +
http://lesjoiesducode.fr/post/50079464381/quand-je-veux-utiliser-la-derniere-api-en-version-beta
+ quand je veux utiliser la dernière API en version bêta dans un projet en prod + http://ljdchost.com/yidIDyA.gif +
+ + 49930756926 +
http://lesjoiesducode.fr/post/49930756926/quand-mon-try-catch-ne-fonctionne-pas
+ quand mon try-catch ne fonctionne pas + http://ljdchost.com/ZKMvZ0O.gif +
+ + 47194170613 +
http://lesjoiesducode.fr/post/47194170613/quand-le-chef-veut-faire-le-point-a-5-heures-le
+ quand le chef veut faire le point à 5 heures le vendredi + http://ljdchost.com/E1DhQgU.gif +
+ + 46420018667 +
http://lesjoiesducode.fr/post/46420018667/quand-lequipe-support-se-tient-prete-pour-la-mise-en
+ quand l'équipe support se tient prête pour la mise en prod + http://ljdchost.com/iwCfev6TBohRP.gif +
+ + 45418246519 +
http://lesjoiesducode.fr/post/45418246519/quand-un-client-mecontent-se-pointe-au-bureau
+ quand un client mécontent se pointe au bureau + http://ljdchost.com/i1cbaP9vnF8d8.gif +
+ + 45408448927 +
http://lesjoiesducode.fr/post/45408448927/quand-le-nouveau-ne-comprend-rien-au-code-existant
+ quand le nouveau ne comprend rien au code existant + http://ljdchost.com/Ab1sBGN.gif +
+ + 45188616951 +
http://lesjoiesducode.fr/post/45188616951/quand-je-forme-le-stagiaire
+ quand je forme le stagiaire + http://i.imgur.com/JPJjSDO.gif +
+ + 43554518707 +
http://lesjoiesducode.fr/post/43554518707/quand-je-fais-une-demo-de-la-stabilite-du-programme-aux
+ quand je fais une demo de la stabilite du programme aux clients + http://i.imgur.com/c9RSVyh.gif +
+ + 37906597625 +
http://lesjoiesducode.fr/post/37906597625/quand-on-mannonce-que-je-vais-devoir-travailler-main
+ quand on m'annonce que je vais devoir travailler main dans la main avec les sysadmins + http://imgur.com/dguiD.gif +
+ + 36581607302 +
http://lesjoiesducode.fr/post/36581607302/quand-je-me-rends-compte-que-je-bloque-depuis-2-heures
+ quand je me rends compte que je bloque depuis 2 heures a cause d'un point virgule oublie + http://i.imgur.com/bBKKy.gif +
+ + 35336782255 +
http://lesjoiesducode.fr/post/35336782255/quand-le-client-essaie-de-cliquer-sur-les-maquettes
+ quand le client essaie de cliquer sur les maquettes + http://i.imgur.com/Fs2K4.gif +
+ + 35117256254 +
http://lesjoiesducode.fr/post/35117256254/quand-le-binome-me-demande-sil-doit-coder-a-ma-place
+ quand le binome me demande s'il doit coder a ma place + http://cdn.theatlanticwire.com/img/upload/2012/05/10/1268393910_george_clooney_at_the_oscars%20(1).gif +
+ + 34692087813 +
http://lesjoiesducode.fr/post/34692087813/quand-je-decouvre-un-force-close-juste-apres-ma
+ quand je decouvre un force close juste apres ma soumission sur le play store // android + http://i.imgur.com/QJu8Z.gif +
+
diff --git a/dynastie/sites/blog.soutade.fr/css/ljdc.css b/dynastie/sites/blog.soutade.fr/css/ljdc.css new file mode 100644 index 0000000..e4edc09 --- /dev/null +++ b/dynastie/sites/blog.soutade.fr/css/ljdc.css @@ -0,0 +1,32 @@ +.ljdc +{ + display:block; + margin:30px; +} + +.ljdc a, .ljdc title +{ + font-family: 'Source Code Pro',Courier; + font-size: 1.3em; + font-weight:300; + line-height: 1.3em; + text-align: center; + margin: 5px; +} + +.ljdc img +{ + display:block; + margin: 10px; + max-width: 400px; + max-height: 400px; + margin-left: auto; + margin-right: auto; +} + +.ljdc a:link, .ljdc a:visited, .ljdc a:hover +{ + color: rgba(0, 0, 0, 0.8); + text-decoration:none; +} + diff --git a/dynastie/templates/search_blog.html b/dynastie/templates/search_blog.html new file mode 100644 index 0000000..d1cc392 --- /dev/null +++ b/dynastie/templates/search_blog.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} + +{% block content %} +Home Categories Tags +

+Add a post Generate blog Generate search index +

+
+{% csrf_token %} + +
+{% if posts|length == 0 %} +

+Any post found

+{% else %} + +{% for post in posts %} +{% with post.id as cur_id %} + + {% endwith %} +{% endfor %} +{% endif %} +
{{ post.id }}{{ post.title }}{{ post.category.name }}{{ post.creation_date }}{{ post.modification_date }}{{ post.published }}{{ post.front_page }}{{ comments|hash:cur_id|default_if_none:"0" }} comment{{ comments|hash:cur_id|pluralize }}Delete
+{% endblock %} diff --git a/misc/ljdc.perl b/misc/ljdc.perl new file mode 100755 index 0000000..9b5c41b --- /dev/null +++ b/misc/ljdc.perl @@ -0,0 +1,95 @@ +#!/usr/bin/perl + +use LWP::Simple; + +sub usage() { + print "usage: ./ljdc in_file [out.xml]\n" +} + +my $size = scalar(@ARGV); + +if ($size == 0 || ($size == 1 && ($ARGV[0] =~ "-h" || $ARGV[0] =~ "--help" ))) +{ + usage(); + exit(0) +} + +my $in_file = $ARGV[0]; +my $out_file = "out.xml"; + +if ($size == 2) +{ + $out_file = $ARGV[1]; +} + +if( ! open(IN_FILE,"<$in_file") ) { + exit(1); +} + +if( ! open(OUT_FILE,">:encoding(utf-8)", $out_file) ) { + exit(1); +} + +print(OUT_FILE "\n"); +# print(OUT_FILE ''); +print(OUT_FILE "\n"); + +while( defined( $address = ) ) { + + my $id; + + chomp($address); + + next if (length($address) == 0); + + if ($address =~ /post\/([0-9]+)\//) + { + $id = $1; + } + else + { + print "id not found for $address\n"; + next; + } + + my $title = "", $img = ""; + my $contents = get($address); + my @lines = split /\n/, $contents; + + foreach my $line (@lines) { + + if (length($title) == 0 && $line =~ /Les joies du code - (.*)<\/title>/) { + $title = $1; + } + + if ($line =~ /<p class="c1"><img.*src=\"([^"]+)\".*\/><\/p>/) { + $img = $1; + last; + } + + if ($line =~ /<div class="bodytype"> <p class="centredimg"><img .*src=\"([^"]+)\".*\/>/) { + $img = $1; + last; + } + } + + if (length($title) == 0 || length($img) == 0) + { + print "Error with $address\n"; + print "Title not defined\n" if (length($title) == 0); + print "IMG not defined\n" if (length($img) == 0); + } + else + { + print(OUT_FILE " <entry>\n"); + print(OUT_FILE " <id>$id</id>\n"); + print(OUT_FILE " <address>$address</address>\n"); + print(OUT_FILE " <title>$title\n"); + print(OUT_FILE " $img\n"); + print(OUT_FILE " \n"); + } +} +print(OUT_FILE "\n"); +close(OUT_FILE); + +print "Done !\n";