Plusieurs mises à jour

This commit is contained in:
Mindiell 2024-04-06 10:03:48 +02:00
parent adc00f2d54
commit 950c92c48f
11 changed files with 140 additions and 14 deletions

View File

@ -11,6 +11,7 @@ from .finish_review import FinishReview
from .hello import Hello from .hello import Hello
from .help import Help from .help import Help
from .individual_subject import IndividualSubject from .individual_subject import IndividualSubject
from .input_participant import InputParticipant
from .input_review import InputReview from .input_review import InputReview
from .license import License from .license import License
from .listen_alexandrie import ListenAlexandrie from .listen_alexandrie import ListenAlexandrie
@ -28,6 +29,7 @@ hooks = (
CancelPreviousInput(), CancelPreviousInput(),
Chrono(), Chrono(),
CollectiveSubject(), CollectiveSubject(),
InputParticipant(),
Comment(), Comment(),
Current(), Current(),
FinishReview(), FinishReview(),

View File

@ -67,14 +67,14 @@ class FinishReview:
text=report, text=report,
expiration=bot.settings.PASTEBIN_EXPIRATION, expiration=bot.settings.PASTEBIN_EXPIRATION,
) )
pastebin_url = result.full_url pastebin_url = result["full_url"]
# On sauve le texte dans un fichier # On sauve le texte dans un fichier
review_path = os.path.join( review_file = (
bot.settings.REVIEW_DIRECTORY,
f"{bot.review.start_time.strftime('%Y%m%d')}" f"{bot.review.start_time.strftime('%Y%m%d')}"
"-log-irc-revue-hebdomadaire.txt", "-log-irc-revue-hebdomadaire.txt"
) )
review_path = os.path.join(bot.settings.REVIEW_DIRECTORY, f"{review_file}")
with open(review_path, "w") as file_handle: with open(review_path, "w") as file_handle:
file_handle.write(report) file_handle.write(report)
@ -84,12 +84,15 @@ class FinishReview:
f"{stats.year_review(bot.review.year)}e de l'année {bot.review.year}.", f"{stats.year_review(bot.review.year)}e de l'année {bot.review.year}.",
) )
bot.send(channel, f"% Compte-rendu de la revue : {pastebin_url}") bot.send(channel, f"% Compte-rendu de la revue : {pastebin_url}")
bot.send(channel, "% Durée de la revue : {temps_ecoule} minutes") bot.send(channel, f"% Durée de la revue : {bot.review.duration} minutes")
bot.send(channel, "% Nombre de personnes participantes : {combien}") bot.send(
channel,
f"% Nombre de personnes participantes : {bot.review.user_count}",
)
bot.send( bot.send(
channel, channel,
"% La participation moyenne aux revues est de " "% La participation moyenne aux revues est de "
f"{stats.avg_users} personnes", f"{stats.avg_users:.1f} personnes",
) )
bot.send( bot.send(
channel, channel,
@ -100,7 +103,7 @@ class FinishReview:
channel, channel,
f"% {bot.review.owner}, ne pas oublier d'ajouter le compte-rendu " f"% {bot.review.owner}, ne pas oublier d'ajouter le compte-rendu "
"de la revue sur https://agir.april.org/issues/135 en utilisant " "de la revue sur https://agir.april.org/issues/135 en utilisant "
"comme nom de fichier {nom_fichier}", f"comme nom de fichier {review_file}",
) )
bot.send(channel, "% Fin de la revue hebdomadaire") bot.send(channel, "% Fin de la revue hebdomadaire")
bot.send(bot.review.owner, "Revue finie.") bot.send(bot.review.owner, "Revue finie.")

View File

@ -0,0 +1,13 @@
import logger
class InputParticipant:
def process(self, bot, channel, sender, message):
"""
Si le commentaire est ras, l'utilisateur est compté comme participant,
mais le message n'est pas considéré comme pris en compte.
"""
if message == "%ras" or message == "% ras":
logger.info("participant comment during review.")
bot.review.add_participant(sender)

View File

@ -91,12 +91,20 @@ class Review:
self.participants.append(sender) self.participants.append(sender)
self.current_topic.add_message(sender, message) self.current_topic.add_message(sender, message)
def add_participant(self, sender):
if self.current_topic:
if sender not in self.participants:
self.participants.append(sender)
self.current_topic.add_participant(sender)
def start(self, owner): def start(self, owner):
self.started = True self.started = True
self.ended = False
self.owner = owner self.owner = owner
self.start_time = datetime.today() self.start_time = datetime.today()
def close(self): def close(self):
self.started = False
self.ended = True self.ended = True
self.end_time = datetime.today() self.end_time = datetime.today()
@ -214,7 +222,7 @@ class Review:
) )
percentage = ( percentage = (
stats.users_board.datas[self.user_count] / stats.users_board.sum * 100 stats.users_board[self.user_count] / stats.users_board.sum * 100
) )
content += fill( content += fill(
"Statistiques sur la participation à la revue " "Statistiques sur la participation à la revue "
@ -231,7 +239,7 @@ class Review:
content += "\n" content += "\n"
percentage = ( percentage = (
stats.users_board.datas[self.user_count] / stats.users_board.sum * 100 stats.users_board[self.user_count] / stats.users_board.sum * 100
) )
content += fill( content += fill(
"Statistiques sur la durée de la revue " "Statistiques sur la durée de la revue "

View File

@ -169,7 +169,7 @@ class ReviewStats:
self.durations_board = DurationBoard(self.datas) self.durations_board = DurationBoard(self.datas)
def save(self): def save(self):
with open(self.filepath, "wt") as file_handle: with open(self.filepath, "w") as file_handle:
for data in self.datas: for data in self.datas:
file_handle.write( file_handle.write(
f"{data.date.strftime('%Y%m%d-%Hh%M')}\t" f"{data.date.strftime('%Y%m%d-%Hh%M')}\t"

View File

@ -36,6 +36,10 @@ class Topic:
if sender not in self.participants: if sender not in self.participants:
self.participants.append(sender) self.participants.append(sender)
def add_participant(self, sender):
if sender not in self.participants:
self.participants.append(sender)
def cancel_previous(self, author): def cancel_previous(self, author):
messages = [message for message in self.messages if message.author == author] messages = [message for message in self.messages if message.author == author]
if len(messages) == 0: if len(messages) == 0:

View File

@ -13,7 +13,7 @@ LOGDATE = os.environ.get("LOGDATE", "%Y-%m-%d %H:%M:%S")
# IRC configuration # IRC configuration
IRC_SERVER = os.environ.get("IRC_SERVER", "irc.libera.chat") IRC_SERVER = os.environ.get("IRC_SERVER", "irc.libera.chat")
IRC_PORT = int(os.environ.get("IRC_PORT", 6667)) IRC_PORT = int(os.environ.get("IRC_PORT", 6667))
IRC_CHANNEL = os.environ.get("IRC_CHANNEL", " #april") IRC_CHANNEL = os.environ.get("IRC_CHANNEL", " #april-test")
IRC_NICK = os.environ.get("IRC_NICK", "Testbot") IRC_NICK = os.environ.get("IRC_NICK", "Testbot")
IRC_PASSWORD = os.environ.get("IRC_PASSWORD", " ") IRC_PASSWORD = os.environ.get("IRC_PASSWORD", " ")
IRC_DELAY = float(os.environ.get("IRC_DELAY", 0.5)) # Délai entre plusieurs messages IRC_DELAY = float(os.environ.get("IRC_DELAY", 0.5)) # Délai entre plusieurs messages
@ -29,7 +29,7 @@ REVIEW_STATS = os.environ.get("REVIEW_STATS", os.path.join(REVIEW_DIRECTORY, "re
# Pastebin # Pastebin
PASTEBIN_URL = "https://paste.chapril.org/" PASTEBIN_URL = "https://paste.chapril.org/"
# Values : 5min, 10min, 1hour, 1day, 1week, 1month, 1year, never # Values : 5min, 10min, 1hour, 1day, 1week, 1month, 1year, never
PASTEBIN_EXPIRATION = "5min" PASTEBIN_EXPIRATION = "1week"
# Cron # Cron
CRON_REVIEW_REMINDERS = [(11, 45)] CRON_REVIEW_REMINDERS = [(11, 45)]

View File

@ -0,0 +1,57 @@
================================================================================
Revue de la semaine en cours
mardi 02 avril 2024
================================================================================
================================================================================
--------------------------- Personnes participantes ----------------------------
* Ccccc Ccccc (ccccc)
================================================================================
----------------------------- Ccccc Ccccc (ccccc) ------------------------------
=== 1/ Actions passées ou en cours ===
* (09:59:32) lonugem: c'est cool quand « Libre à vous ! » comme ressource
argumentaire :)
https://pouet.april.org/@jonathangalou@mastodon.zaclys.com/112190112236507216 <-
<3
Log IRC brut
* Hebdobot : % Début de la réunion hebdomadaire
* Hebdobot : % rappel : toute ligne commençant par % sera considérée comme un
commentaire et non prise en compte dans la synthèse
* Hebdobot : % pour connaître le point courant, taper !courant
* lllll : #1
* Hebdobot : Sujet individuel : 1
* Hebdobot : % si rien à signaler vous pouvez écrire % ras
* Hebdobot : % quand vous avez fini vous le dites par % fini
* lllll : %erreur :)
* lllll : # 1/ Actions passées ou en cours
* Hebdobot : % durée du point 1 : 0:00
* Hebdobot : % , on va passer à la suite : 1/ Actions passées ou en cours
* Hebdobot : Sujet individuel : 1/ Actions passées ou en cours
* Hebdobot : % si rien à signaler vous pouvez écrire % ras
* Hebdobot : % quand vous avez fini vous le dites par % fini
* ccccc : (09:59:32) lonugem: c'est cool quand « Libre à vous ! » comme
ressource argumentaire :)
https://pouet.april.org/@jonathangalou@mastodon.zaclys.com/112190112236507216 <-
<3
* lllll : # 2/ Actions à venir
* Hebdobot : % durée du point 1/ Actions passées ou en cours : 0:00
* Hebdobot : % ccccc, on va passer à la suite : 2/ Actions à venir
* Hebdobot : Sujet individuel : 2/ Actions à venir
* Hebdobot : % si rien à signaler vous pouvez écrire % ras
* Hebdobot : % quand vous avez fini vous le dites par % fini
* lllll : !fin
* Hebdobot : % durée du point 2/ Actions à venir : 0:00
Statistiques
C'était la 314e revue hebdomadaire de l'April, la 1e de l'année 2024.
Horaire de début de la revue : 09h59

6
tests/datas/irc_2.txt Normal file
View File

@ -0,0 +1,6 @@
lllll : #1
lllll : %erreur :)
lllll : # 1/ Actions passées ou en cours
ccccc : (09:59:32) lonugem: c'est cool quand « Libre à vous ! » comme ressource argumentaire :) https://pouet.april.org/@jonathangalou@mastodon.zaclys.com/112190112236507216 <- <3
lllll : # 2/ Actions à venir
lllll : !fin

View File

@ -29,3 +29,26 @@ def test_complete_review(bot):
with open("tests/reviews/20231201-log-irc-revue-hebdomadaire.txt") as file_handle: with open("tests/reviews/20231201-log-irc-revue-hebdomadaire.txt") as file_handle:
content_tested = file_handle.read() content_tested = file_handle.read()
assert content_ok in content_tested assert content_ok in content_tested
def test_other_review(bot):
with open("tests/datas/irc_2.txt") as file_handle:
content = file_handle.read().splitlines()
messages = []
for line in content:
data = line.split(":")
author = data[0].strip()
text = ":".join(data[1:]).strip()
messages.append((author, text))
bot.test_public_message(bot.channel, "lllll", "!start")
bot.review.start_time = datetime(2024, 4, 2, 9, 59, 0)
for message in messages:
bot.test_public_message(bot.channel, message[0], message[1])
# compare contents
with open("tests/datas/20240402-log-irc-revue-hebdomadaire.txt") as file_handle:
content_ok = file_handle.read()
with open("tests/reviews/20240402-log-irc-revue-hebdomadaire.txt") as file_handle:
content_tested = file_handle.read()
assert content_ok in content_tested

View File

@ -424,6 +424,16 @@ def test_missing_no_one_is_missing(bot):
assert bot.answers[0].message == "% Tout le monde s'est exprimé sur le sujet courant \\o/" assert bot.answers[0].message == "% Tout le monde s'est exprimé sur le sujet courant \\o/"
def test_missing_no_one_is_missing_through_ras(bot):
bot.test_public_message(bot.channel, OWNER, "!start")
bot.test_public_message(bot.channel, OWNER, "## collective topic")
bot.test_public_message(bot.channel, SENDER, "%ras")
bot.test_public_message(bot.channel, OWNER, "This is owner message")
bot.test_public_message(bot.channel, OWNER, "!manquantes")
assert len(bot.answers) == 1
assert bot.answers[0].message == "% Tout le monde s'est exprimé sur le sujet courant \\o/"
def test_missing_one_is_missing(bot): def test_missing_one_is_missing(bot):
bot.test_public_message(bot.channel, OWNER, "!start") bot.test_public_message(bot.channel, OWNER, "!start")
bot.test_public_message(bot.channel, OWNER, "## collective topic") bot.test_public_message(bot.channel, OWNER, "## collective topic")
@ -484,7 +494,7 @@ def test_finish_review_already_finished(bot):
bot.test_public_message(bot.channel, OWNER, "!fin") bot.test_public_message(bot.channel, OWNER, "!fin")
bot.test_public_message(bot.channel, OWNER, "!fin") bot.test_public_message(bot.channel, OWNER, "!fin")
assert len(bot.answers) == 1 assert len(bot.answers) == 1
assert bot.answers[0].message == "La revue est déjà finie." assert bot.answers[0].message.endswith(", pas de revue en cours.")
def test_finish_review_not_owner(bot): def test_finish_review_not_owner(bot):