This commit is contained in:
Alexis Métaireau 2024-01-15 00:44:17 +01:00
parent 2d3c392435
commit 2de1f736ad
10 changed files with 268 additions and 34 deletions

View file

@ -0,0 +1,8 @@
---
title: Format an USB disk from the command-line on MacOSX
---
```bash
sudo diskutil unmountDisk /dev/disk5
sudo diskutil eraseDisk "MS-DOS FAT32" Brocolis /dev/disk
```

View file

@ -4,12 +4,12 @@ save_as: argos/index.html
total_days: 8 total_days: 8
template: worklog template: worklog
--- ---
## Samedi 16 Décembre 2023 (0h, 5h, 5/5) ## Samedi 16 Décembre 2023 (0h, 5h bénévoles, 5/5)
J'ai ajouté le support de [Alembic](https://alembic.sqlalchemy.org), pour permettre de faire des migrations de base de données. C'était assez chouette de découvrir comment ça fonctionne : ça fait longtemps que je l'utilise sur d'autres projets mais ce n'était pas moi qui l'avait mis en place. J'ai ajouté le support de [Alembic](https://alembic.sqlalchemy.org), pour permettre de faire des migrations de base de données. C'était assez chouette de découvrir comment ça fonctionne : ça fait longtemps que je l'utilise sur d'autres projets mais ce n'était pas moi qui l'avait mis en place.
J'ai aussi passé un peu de temps à faire des petits changements à droite à gauche. J'ai aussi passé un peu de temps à faire des petits changements à droite à gauche.
## Jeudi 14 Décembre 2023 (0h, 1h bénévole, 5/5) ## Jeudi 14 Décembre 2023 (0h, 1h bénévoles, 5/5)
Echanges avec Luc pour faire le tour des merge requests, et un petit temps de bilan général sur le projet. Echanges avec Luc pour faire le tour des merge requests, et un petit temps de bilan général sur le projet.
Content de recevoir des retours positifs sur le travail effectué. Content de recevoir des retours positifs sur le travail effectué.

View file

@ -3,8 +3,15 @@ title: Chariotte
save_as: chariotte/index.html save_as: chariotte/index.html
template: worklog template: worklog
--- ---
## Dimanche 17 Décembre 2023 (0h, 8h bénévoles, 4/5)
## 27 Novembre 2023 (0h, 4h bénévoles, 3/5) J'ai passé beaucoup de temps pour essayer de comprendre pourquoi les emails n'étaient pas envoyés lors de la récupération de mot de passe. J'ai fini par trouver en utilisant un bon vieux debugger, comme quoi c'est la solution à privilégier autant que possible.
Le code actuel utilise `username` comme un champ de stockage d'emails, et Django avait du mal à retrouver ses petits (il cherchait dans le champ `email` sans succès). J'ai fini par trouver la solution. Je suis content de réussir à remonter en compétences sur le debug de django, même si je pensais que ça me prendrais moins de temps :-)
J'ai aussi mis en place de la documentation.
## Lundi 27 Novembre 2023 (0h, 4h bénévoles, 3/5)
Chariotte.fr est maintenant hébergé par Alwaysdata ! Chariotte.fr est maintenant hébergé par Alwaysdata !
Arthur m'a envoyé les données puis j'ai fait la commande suivante : Arthur m'a envoyé les données puis j'ai fait la commande suivante :

View file

@ -1,10 +1,16 @@
--- ---
title: IDLV, site web vers ghost title: Indiens dans la ville
save_as: idlv-ghost/index.html save_as: idlv-ghost/index.html
total_days: 2 total_days: 2
template: worklog template: worklog
--- ---
Transformation d'un site web depuis hugo vers ghost.
## 12 Janvier 2023 (1h, 4/5)
Changement de la pagination par défaut. J'ai mis du temps à trouver ou était le bon réglage, mais c'était très simple une fois trouvé. Je m'attendais à trouver l'information dans l'admin, mais cela fait partie des réglages du thème.
## 30 Octobre 2023 (0h, 1h bénévoles, 2/5) ## 30 Octobre 2023 (0h, 1h bénévoles, 2/5)
Incorporation des changements de Charly Incorporation des changements de Charly
@ -19,11 +25,11 @@ Incorporation des changements suite à discussion
Réponse à un mail de Charly Réponse à un mail de Charly
## 23 Juin 2023 (1h, 1h bénévoles, 3/5) ## 23 Juin 2023 (0h, 2h bénévoles, 3/5)
Ajout de la fonctionnalité de galerie. Ajout de la fonctionnalité de galerie.
## 22 Juin 2023 (1h, 2/5) ## 22 Juin 2023 (0h, 1h bénévoles, 2/5)
Mail + recherches photoswipe ghost. Mail + recherches photoswipe ghost.

View file

@ -4,6 +4,108 @@ save_as: umap/index.html
template: worklog template: worklog
total_days: 25 total_days: 25
--- ---
## Vendredi 12 Janvier 2023 (3h)
J'ai continué à coder la piste initiée mercredi. Je me rends compte qu'il me
faudra peut-être un moyen de faire du lien entre les données, et que cette
information soit stockée quelque part (pour des re-rendus en cascade, si des
données sont dépendantes d'autres données).
En tout cas, j'ai une interface un peu plus claire pour le Mixin de `rerender`.
## Mercredi 10 Janvier 2023 (7h, 4/5)
La piste des IDs est finalement écartée pour l'instant, je ne suis pas encore
certain d'en avoir besoin, peut-être qu'il n'est pas utile d'identifier les
features de manière unique au niveau de la base de données, et que cette
information n'est utile que de manière ponctuelle pour la synchronisation de
données (avec les CRDTs).
On a changé d'approche avec Yohan pour commencer à coder et voir ou ça
bloquerait. On a commencé par ajouter de la synchro sur les champs du
formbuilder de la carte.
Je suis assez surpris par la relative simplicité de la tâche: je m'attendais à
quelque chose de bien plus compliqué, mais — en tout cas pour le formbuilder —
c'est assez simple puisque lui modifie des données qui lui sont extérieures. Il
est donc possible de se connecter sur son étape finale pour updater les données
à synchroniser.
Actuellement, des `callbacks` sont définis manuellement par le code qui appelle
le formbuilder (pour re-rendre les éléments qui en ont besoin), on factorise
tout ça, pour faire en sorte que les données qui viennent de l'extérieur mettent
aussi à jour l'interface.
Je suis content de réussir à avancer sur des trucs un peu plus concrets. Aussi
très content des discussions « en off » avec Yohan. L'impression qu'on réussi à
commencer à désamorcer certains trucs avant qu'ils ne s'installent.
En fin de journée, je repasse sur la proposition de Json Joy qui me semble
intéressante en terme d'API, et plus tournée vers des composants réutilisables.
Avec un peu de recul, les avancées de ces quelques jours ne sont pas techniques,
mais humainess. On a passé du temps à confronter des approches, avant de se
rendre compte qu'il s'agissait *aussi* de peurs chez l'un et chez l'autre, ce
qui nous a permis de trouver un moyen de travailler ensemble plus efficacement.
Frustrant de ne pas avoir avancé techniquement, mais l'impression d'être sur de
bons rails humains, et d'avoir pu dégrossir certains aspects du code pour me les
rendre compréhensibles.
## Mardi 09 Janvier 2023 (8h, 3/5)
On discute avec Yohan de comment faire pour avancer, on commence à travailler
en pair pour plutôt décider se séparer le travail au lieu de le faire ensemble.
Yohan s'occupera de faire une séparation du code qui fait le « rendering », je
travaille sur la partie qui fait la synchronisation de données, qui va utiliser
les APIs exposées par Yohan.
Ce choix m'aide à me sentir plus à l'aise: je n'ai pas besoin de faire trop
de refactoring sur un code que je ne connais pas et qui me demande beaucoup de
temps de lecture et de compréhension.
Une discussion avec David me fait imaginer un scénario que j'avais oublié:
faire une bibliothèque Leaflet qui permet de faire de la synchro de données, de
manière générique. J'aime bien le fait que ça propose une séparation claire de
qui fait quoi, et permettrait d'avoir une frontière bien définie avec le code
actuel.
Je ne trouve pas trop ma place dans la weekly qui est plus orientée décisions
stratégiques que updates des uns et des autres. Ça me pose question, j'aimerai
bien réussir à aborder le sujet lors d'un prochain point.
Je travaille sur un bout de code qui ajoute la gestion des identifiants sur les
features GeoJSON, et j'ajoute un test dans playwright (c'est plaisant). Utiliser
des UUIDs (v4) voudrait dire avoir 36bits * 12 000 000 layers * 50 features =
21,6GB de données en plus sur la base de données de OSMFR.
Partir sur des identifiants plus courts permet d'utiliser moins d'espace.
Je suis content des bouts de discussions qu'on a pu avoir, qui entament une
réflexion sur la manière dont on travaille ensemble, ce qu'on attends l'un de
l'autre. Je me rends compte que ma confiance en moi est faible, et que j'ai
besoin de la conforter avant d'être efficace pour travailler avec d'autres.
Content de la découverte, et d'avoir pu l'expliciter auprès de Yohan.
J'espère que ça débouchera sur quelque chose de sain et productif.
## Lundi 08 Janvier 2023 (9h, 3/5)
Matinée passée et début d'après midi avec Yohan à faire une release de uMap puis
à faire du bugfix dessus ensuite. Fin d'après-midi à discuter de la manière dont
on peut imaginer la suite du travail ensemble. On patine un peu, on a du mal à
trouver une manière de fonctionner qui nous convienne à tous les deux.
## Lundi 18 Décembre 2023 (9h, 5/5)
J'ai creusé sur mon idée de faire en sorte de synchroniser un point, j'ai une meilleure compréhension de ou m'insérer dans le code, et j'ai pu commencer à coder un bout de code qui fait la connexion avec le stockage.
J'ai aussi commencé à coder la partie stockage, en mettant de côté pour le moment la partie CRDT en tant que telle, j'ai l'impression de voir comment ça va fonctionner maintenant, et l'intégration avec Y.JS me semble difficile sans utiliser de bundler js, ce qui est peut-être un signe qu'il faut aller voir ailleurs (Json Joy me fait de l'oeil)
J'ai découvert la documentation de Leaflet [sur comment les objets fonctionnent](https://leafletjs.com/reference.html#class) et la documentation de [Leaflet Editable](http://leaflet.github.io/Leaflet.Editable/doc/api.html#editable) qui étaient en fait des lectures indispensables à la bonne compréhension du code de umap.
On a terminé la journée avec une session de pair avec Yohan qui était vraiment bien : j'avais des questions précises et on a pu avancer ensemble vers plus de clarté.
## Samedi 16 Décembre 2023 (4h, 5/5) ## Samedi 16 Décembre 2023 (4h, 5/5)
@ -15,9 +117,10 @@ J'ai passé l'aprèm à mettre des petits points d'arrêts dans mon navigateur w
Le fait qu'on utilise pas de bundler rends les choses un peu plus compliquées, mais je suis content d'avoir la main sur comment les choses sont faites. Le fait qu'on utilise pas de bundler rends les choses un peu plus compliquées, mais je suis content d'avoir la main sur comment les choses sont faites.
J'ai un peu bloqué sur l'utilisation de Y.JS, qui s'attends à ce que d'autres modules soient disponibles dans des namespaces specifiques, ce qui ne correspond pas vraiment à nos pratiques. J'ai un peu bloqué sur l'utilisation de Y.JS, qui s'attends à ce que d'autres modules soient disponibles dans des namespaces spécifiques, ce qui ne correspond pas vraiment à nos pratiques.
J'ai découvert [import maps]() et j'ai commencé à les utiliser, mais ça ne semble pas suffire pour notre approche "simpliste". En tout cas, pas pour Y.JS (https://github.com/yjs/yjs/issues/325) J'ai découvert [import maps]() et j'ai commencé à les utiliser, mais ça ne semble pas suffire pour notre approche "simpliste". En tout cas, pas pour Y.JS (https://github.com/yjs/yjs/issues/325)
## Vendredi 15 Décembre 2023 (7h, 3/5) ## Vendredi 15 Décembre 2023 (7h, 3/5)
🚗 J'ai travaillé depuis la maison, suite à des soucis de voiture. 🚗 J'ai travaillé depuis la maison, suite à des soucis de voiture.
@ -28,7 +131,8 @@ J'ai pu discuter avec Vincent puis avec David du sujet. Je suis content [de l'ap
J'en ai profité pour [ajouter mes apprentissages](https://github.com/umap-project/umap/pull/1471) dans la documentation développeur, le genre d'informations que je récupère à droite à gauche et qui sont utiles pour pouvoir contribuer. J'en ai profité pour [ajouter mes apprentissages](https://github.com/umap-project/umap/pull/1471) dans la documentation développeur, le genre d'informations que je récupère à droite à gauche et qui sont utiles pour pouvoir contribuer.
J'ai un peu réorganisé mes notes autour des différents challenges qu'on a sur ce projet concernant les différents aspects (stockage, réactivité, réconcialition des données, transport). Et entre autre autour de la partie transport. J'ai un peu réorganisé mes notes autour des différents challenges qu'on a sur ce projet concernant les différents aspects (stockage, réactivité, réconcialiation des données, transport). Et entre autre autour de la partie transport.
## Jeudi 14 Décembre 2023 (8h, 5/5) ## Jeudi 14 Décembre 2023 (8h, 5/5)
Réunion le matin avec Yohan et NLNet, l'idée était de valider notre plan d'action, et c'est bon. Les documents sont signés on est surs d'avoir le financement. Sacrée nouvelle :-) Réunion le matin avec Yohan et NLNet, l'idée était de valider notre plan d'action, et c'est bon. Les documents sont signés on est surs d'avoir le financement. Sacrée nouvelle :-)
@ -41,7 +145,7 @@ L'après-midi j'ai passé un peu de temps pour voir comment on pourrait utiliser
## Mercredi 13 Décembre 2023 (2h, 3/5) ## Mercredi 13 Décembre 2023 (2h, 3/5)
Je n'ai pas pris de notes.
## Mardi 12 Décembre 2023 (4h, 4/5) ## Mardi 12 Décembre 2023 (4h, 4/5)

View file

@ -0,0 +1,78 @@
---
date: 2023-12-17
headline:
---
# 2023, Semaine 49 et 50
Deux semaines de travail depuis la dernière update. Je me suis fait mal au poignet ce qui m'a pas mal ralenti.
## Ce qui s'est passé
**🗺️ [uMap](https://github.com/umap-project/umap/)**
J'ai posé et déroulé les différents scenarii pour avoir de la synchronisation entre différents clients. Lu et compris comment le code s'articule. Documenté certains aspects du code, et passé du temps sur des aspects techniques (intégration de modules ES6, utilisation de Web components).
De manière générale, je monte en compétences sur JavaScript, et je rattrape mon retard des quelques années sur l'état du web 🤓
On a pu faire un petit point d'intégration, pour savoir si la manière de fonctionner convient à tout le monde. J'ai proposé de changer un peu de rythme, être à 2j/semaine est assez frustrant (j'ai l'impression d'arrêter le moteur quand il est à peine chaud). J'ai proposé de travailler des semaines continues, puis de faire des semaines *off*, on verra comment ça marche.
On à eu le « go » officiel de NLNet, ce qui veut dire que je vais pouvoir travailler sur le projet durant les prochains mois.
**🚨 [Argos](https://framagit.org/framasoft/framaspace/argos)**
Un échange en visio avec Luc pour faire le tour des changements qu'il propose sur le projet.
J'ai ajouté le support d'[Alembic](https://alembic.sqlalchemy.org), pour permettre de faire des migrations de base de données. C'était assez chouette de découvrir comment ça fonctionne : ça fait longtemps que je l'utilise sur d'autres projets mais ce n'était pas moi qui l'avait mis en place.
J'ai aussi passé un peu de temps à faire des petits changements à droite à gauche et de la revue de code.
**🧺 [Chariotte](https://gitlab.com/la-chariotte/)**
J'ai passé du temps à comprendre pourquoi les emails n'étaient pas envoyés lors de la récupération de mot de passe. J'ai fini par trouver en utilisant un bon vieux debugger, comme quoi c'est la solution à privilégier autant que possible.
J'ai ajouté de la documentation au projet, et je tends des perches pour qu'on puisse se former en interne sur la gestion du serveur, pour que je ne sois pas le seul à en avoir la compréhension.
**[Notmyidea](https://blog.notmyidea.org)**
J'ai pu faire mes premières factures, et j'ai même eu mes premiers paiements !
## Des joies 🤗
- 🪶 Me balader, observer les oiseaux, jouer à des jeux de société, manger des pancakes.
- 🧘🏼 Passer du temps seul, à plusieurs reprises, sur des périodes longues qui me permettent de me concentrer et d'avancer sur des choses importantes pour moi.
- 🌱 Prévenir les problèmes. Provoquer un point pour être sur qu'on se comprenne bien. Je suis content de l'avoir fait et ça me redonne de l'envie.
- 🤗 Avoir des bons retours sur mon travail valorise mon approche et mes compétences, je prends 😇
- 🍅 Me remettre aux [pomodoro](https://fr.wikipedia.org/wiki/Technique_Pomodoro) qui me permettent de me concentrer plus facilement.
- 🎹 Faire du piano et chanter avec une amie
- Se prévoir du temps de qualité avec des petits groupes de personnes.
- J'ai pris mes places pour le 37C3 et j'ai pu m'organiser en avance pour le transport, content de voir le stress que ça m'enlève.
## Des peines 😬
- 🥱 Je me suis parfois senti fatigué, j'ai parfois dormi en décalé.
- 🏸 Je me suis blessé au poignet gauche, inutilisable pour quelques jours. Ça m'a mis de mauvaise humeur, je n'ai pas réussi à me mettre en arrêt.
- 😤 Je lutte contre mon perfectionnisme. J'ai peur de l'ambiance que ça peut créer, je n'en veux pas. Envie de trouver des artifices pour changer de positionnement.
- 🤓 Je me sens parfois lent parce qu'en dehors de ma zone de confort, j'ai envie d'accepter mes temps d'apprentissages, et de m'assurer que personne ne s'attend à ce que je règle tous les problèmes d'un coup.
- 🫷🏼Je me suis senti triste en apprenant que certains continuent à alimenter leur version de la réalité pour ne pas se questionner sur ce qu'ils alimentent. Content de ne plus en être.
- Je me suis senti triste de me retrouver un week-end entre hommes et de voir le peu d'attention portée aux détails.
- J'ai peur de proposer des changements et que les gens n'osent pas dire non. Je passe beaucoup de temps à me rassurer, je ne sais pas encore trop quoi faire de ça et ça me coûte de l'énergie.
## Vu, lu, écouté
- 🎬 Vu [Retours à Reims, Fragments](https://fr.wikipedia.org/wiki/Retour_%C3%A0_Reims_(Fragments)) de Jean Gabriel Périot, basé sur le livre de Didier Éribon et des images d'archives. J'ai vraiment beaucoup apprécié le format, la mise en parallèle des luttes actuelles avec les luttes ouvrières, et le regard féministe.
- 📖 Continué et quasi terminé la lecture de « Le conflit n'est pas une agression ». J'apprécie plusieurs morceaux.
- 📘 J'ai lu d'une traite les 17 premiers articles de [24 jours de web](https://www.24joursdeweb.fr/). J'en retiens:
- [Juste place VS juste prix](https://www.24joursdeweb.fr/2023/juste-place-vs-juste-prix/) de [Julie](https://juliebrillet.fr/), qui fait écho à des interrogations actuelles chez moi, et que je mets en parallèle avec [un billet chez Scopyleft](http://scopyleft.fr/blog/2023/petit-panorama-des-pratiques-de-remuneration-en-horizontalite/)
- [Pourquoi se syndiquer dans l'informatique](https://www.24joursdeweb.fr/2023/pourquoi-se-syndiquer-dans-linformatique/) qui me fait dire que j'aurai sans-doute été mieux équipé si j'avais été syndiqué lors de mes années à la Brasserie.
- [Coder à nouveau après un harcèlement sexuel](https://www.24joursdeweb.fr/2023/coder-a-nouveau-apres-un-harcelement-sexuel/)
- [Concilier free-lance et TDAH](https://www.24joursdeweb.fr/2023/coder-a-nouveau-apres-un-harcelement-sexuel/). Ce n'est pas la première fois que des astuces pour les TDAH me semblent utiles pour moi, et ça me questionne, en tout cas certains des outils risquent de terminer dans ma boîte à outils.
- 🎬 J'ai terminé la série [Dirk Gently](https://fr.wikipedia.org/wiki/Dirk_Gently,_d%C3%A9tective_holistique_(s%C3%A9rie_t%C3%A9l%C3%A9vis%C3%A9e)), j'ai bien aimé le côté décalé, même si l'intrigue est parfois… pas très intéressante.
- 🎬 Vu « Le garçon et le héron » (de myazaki), j'ai vu que beaucoup de personnes avaient été déçues, mais j'ai tout de même passé un bon moment.
- 🎬 Vu « Rien à perdre », de Delphine Deloget. J'ai apprécié les discussions générées, et le regard critique qui pouvait être porté par certains de mes proches.
- 🎶 Découvert [DiscoPunk](https://www.diskopunk.com/), [The Silver Lines ](https://www.thesilverlinesuk.com/)
Divers:
- Découvert les [prix blue hats](https://code.gouv.fr/fr/bluehats/prix-bluehats/) qui cherchent à rémunérer les briques logicielles open source utils à l'état.
- [reefjs](https://reefjs.com/) qui propose une manière simple de faire du code « réactif »

View file

@ -7,24 +7,45 @@
{% block content %} {% block content %}
<header> <header>
<h1 class="post-title">{{ page.title }}</h1> <h1 class="post-title">{{ page.title }}</h1>
{% if "total_days" in page.metadata.keys() %} <details>
{% set percentage = page.metadata.worklog['percentage'] %} <summary>Stats</summary>
{% set total_blocks = 10 %} {% if "total_days" in page.metadata.keys() %}
{% set percentage_value = (percentage / 100.0) %} {% set percentage = page.metadata.worklog['percentage'] %}
{% set full_blocks = ((percentage_value * total_blocks) | round(0, 'floor') ) | int %} {% set total_blocks = 10 %}
{% set empty_blocks = total_blocks - full_blocks %} {% set percentage_value = (percentage / 100.0) %}
<div> {% set full_blocks = ((percentage_value * total_blocks) | round(0, 'floor') ) | int %}
{# Display full blocks #} {% set empty_blocks = total_blocks - full_blocks %}
{% for i in range(full_blocks) %}▓{% endfor %} <div>
{# Display empty blocks #} {# Display full blocks #}
{% for i in range(empty_blocks) %}░{% endfor %} {% for i in range(full_blocks) %}▓{% endfor %}
{{ percentage }}% ({{ page.metadata.worklog['payed_hours'] }}h / {{ page.metadata.worklog['total_hours'] }} prévues) {# Display empty blocks #}
</div> {% for i in range(empty_blocks) %}░{% endfor %}
<ul> {{ percentage }}% ({{ page.metadata.worklog['payed_hours'] }}h / {{ page.metadata.worklog['total_hours'] }} prévues)
<li>{{ page.metadata.worklog['payed_hours'] }}h rémunérées</li> </div>
<li>{{ page.metadata.worklog['volunteer_hours'] }}h bénévoles</li> <ul>
</ul> <li>{{ page.metadata.worklog['payed_hours'] }}h rémunérées</li>
{% endif %} <li>{{ page.metadata.worklog['volunteer_hours'] }}h bénévoles</li>
</ul>
{% endif %}
<table>
<thead>
<tr>
<td>Mois</td>
<td>Heures</td>
<td>Jours</td>
</tr>
</thead>
<tbody>
{% for month, amount in page.metadata.worklog.payed_monthly.items() %}
<tr>
<td>{{ month }}</td>
<td>{{ amount }}</td>
<td>{{ (amount / 7.0) | round(1) }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</details>
</header> </header>
<article> <article>
<div id="vis"></div> <div id="vis"></div>

View file

@ -18,6 +18,8 @@ RELATIVE_URLS = True
TIMEZONE = "Europe/Paris" TIMEZONE = "Europe/Paris"
LOCALE = "fr_FR" LOCALE = "fr_FR"
TAG_FEED_ATOM = "feeds/tags/{slug}.atom.xml"
DEFAULT_DATE_FORMAT = "%d %B %Y" DEFAULT_DATE_FORMAT = "%d %B %Y"
LINKS = [] LINKS = []

View file

@ -1,6 +1,7 @@
import locale import locale
import os.path import os.path
import re import re
from collections import defaultdict
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
@ -11,14 +12,14 @@ from pelican.utils import get_date, slugify
try: try:
locale.setlocale(locale.LC_TIME, "fr_FR.UTF8") locale.setlocale(locale.LC_TIME, "fr_FR.UTF8")
except: except Exception:
locale.setlocale(locale.LC_TIME, "fr_FR") locale.setlocale(locale.LC_TIME, "fr_FR")
class WorklogPreprocessor(Preprocessor): class WorklogPreprocessor(Preprocessor):
pattern = re.compile( pattern = re.compile(
r""" r"""
(?:(\w+)\s+)? # Day name (?:(\w+)\s+)? # Day name
(\d{1,2})\s+ # Day number (\d{1,2})\s+ # Day number
([\wéû]+)\s+ # Month name ([\wéû]+)\s+ # Month name
(\d{4})\s+ # Year (\d{4})\s+ # Year
@ -37,6 +38,7 @@ class WorklogPreprocessor(Preprocessor):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.data = {} self.data = {}
self.payed_monthly = defaultdict(int)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def run(self, lines): def run(self, lines):
@ -63,8 +65,9 @@ class WorklogPreprocessor(Preprocessor):
self.data[date.strftime("%Y-%m-%d")] = { self.data[date.strftime("%Y-%m-%d")] = {
"payed_hours": payed_hours, "payed_hours": payed_hours,
"volunteer_hours": volunteer_hours, "volunteer_hours": volunteer_hours,
"happyness": happiness, "happiness": happiness,
} }
self.payed_monthly[date.strftime("%Y/%m")] += payed_hours
displayed_date = date.strftime("%A %d %B %Y") displayed_date = date.strftime("%A %d %B %Y")
# Replace the line with just the date # Replace the line with just the date
@ -74,15 +77,20 @@ class WorklogPreprocessor(Preprocessor):
return new_lines return new_lines
def compute_data(self, metadata): def compute_data(self, metadata):
"""Do the operations on the data.
This is run once, after everything has been parsed
"""
payed_hours = sum([item["payed_hours"] for item in self.data.values()]) payed_hours = sum([item["payed_hours"] for item in self.data.values()])
volunteer_hours = sum([item["volunteer_hours"] for item in self.data.values()]) volunteer_hours = sum([item["volunteer_hours"] for item in self.data.values()])
data = dict( data = dict(
data=self.data, data=self.data,
payed_hours=payed_hours, payed_hours=payed_hours,
volunteer_hours=volunteer_hours, volunteer_hours=volunteer_hours,
payed_monthly=self.payed_monthly,
template="worklog", template="worklog",
) )
if "total_days" in metadata: if "total_days" in metadata:
total_hours = int(metadata["total_days"]) * 7 total_hours = int(metadata["total_days"]) * 7
data.update( data.update(