Dans la troisième partie de cette série, vous avez vu comment enregistrer les informations de demande de révision de code pour un suivi. Vous avez créé une méthode appelée read_email
récupérer les e-mails de la boîte de réception pour vérifier si un relecteur a répondu à la demande de révision du code. Vous avez également implémenté la gestion des erreurs dans le code du planificateur de révision de code..
Dans cette partie de la série, vous utiliserez les informations de révision de code enregistrées et les informations des courriers électroniques pour vérifier si le réviseur a répondu à la demande de révision. Si une demande n'a pas été traitée, vous enverrez un e-mail de suivi au relecteur..
Commencez par cloner le code source de la troisième partie de la série de tutoriels..
git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Modifier le config.json
fichier pour inclure des adresses e-mail pertinentes, en gardant le [email protected]
adresse électronique. C'est parce que git a des commits liés à cette adresse email particulière qui sont requis pour que le code s'exécute comme prévu. Modifier le SMTP
pouvoirs dans le schedule.py
fichier:
FROM_EMAIL = "[email protected]" FROM_PWD = "votre_mot_passe"
Accédez au répertoire du projet CodeReviewer
et essayez d'exécuter la commande suivante dans le terminal.
python scheduler.py -n 20 -p "projet_x"
Il doit envoyer la demande de révision de code à des développeurs aléatoires pour vérification et créer un reviewer.json
fichier avec information de révision.
Commençons par créer une méthode de demande suivante appelée followup_request
. À l'intérieur de followup_request
méthode, lisez le reviewer.json
déposer et conserver le contenu dans une liste. Voici à quoi ressemble le code:
avec open ('reviewer.json', 'r') comme jfile: review_info = json.load (jfile)
Saisissez ensuite les informations de courrier électronique à l'aide de la touche read_email
méthode que vous avez implémentée dans le dernier tutoriel.
email_info = read_email (no_days)
Si le réviseur a répondu à la demande de révision, il devrait y avoir un email avec le même sujet et un Ré:
tag préfixé à elle. Alors parcourez la liste des informations de révision et comparez le sujet de la critique avec le sujet de l'e-mail pour voir si le réviseur a répondu à la demande..
pour examen dans review_info: review_replied = false attendu_subject = 'RE:' + review ['sujet'] pour un email dans email_info: if attendu_subject == email ['objet']: review_replied = True print 'Le relecteur a répondu' pause;
Comme on le voit dans le code ci-dessus, vous avez itéré à travers le review_info
répertorier et vérifier le sujet des informations de révision par rapport au sujet de l'email pour voir si le réviseur a répondu.
Maintenant, une fois que le réviseur a répondu à la demande de révision du code, vous n'avez pas besoin de conserver les informations de révision particulières dans la liste. reviewer.json
fichier. Alors créez une méthode Python appelée Delete_Info
supprimer les informations de révision particulières du reviewer.json
fichier. Voici comment Delete_Info
regards:
def Delete_Info (info, id): pour i dans xrange (len (info)): si info [i] ['id'] == id: info.pop (i) info de retour de pause
Comme indiqué dans le code ci-dessus, vous avez parcouru la liste des informations de révision et supprimé l'entrée qui correspond à l'identifiant. Après avoir supprimé les informations du fichier, retournez la liste.
Vous devez appeler le Delete_Info
méthode à laquelle on répond à un élément d’examen donné. Lorsque vous appelez le Delete_Info
méthode, vous devez transmettre une copie du review_info
afin que la liste d'informations d'origine ne soit pas modifiée. Vous aurez besoin de la liste initiale des informations de révision pour une comparaison ultérieure. Alors importez le copie
Module Python pour créer une copie de la liste des informations de révision d'origine.
de copie copie copie
Créer une copie du review_info
liste.
review_info_copy = copier (review_info)
Lorsque vous supprimez les informations de révision auxquelles il a été répondu de la liste d'origine, transmettez la liste de copies au Delete_Info
méthode.
review_info_copy = Delete_Info (review_info_copy, consultez ['id'])
Voici la followup_request
méthode:
def followup_request (): with open ('reviewer.json', 'r') sous le nom jfile: review_info = json.load (jfile) review_info_copy = copier (review_info) email_info = read_email (no_days) pour examen dans review_info: review_replied = False attendu = 'Re:' + review ['subject'] pour le courrier électronique dans email_info: ifspect_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']) break;
Maintenant, une fois le review_info
la liste a été itérée, vous devez vérifier s’il ya des changements dans la reviewer.json
fichier. Si des informations de révision existantes ont été supprimées, vous devez mettre à jour le reviewer.json
déposer de manière appropriée. Alors vérifiez si review_info_copy
et review_info
sont les mêmes, et mettre à jour le reviewer.json
fichier.
if review_info_copy! = review_info: avec open ('reviewer.json', 'w') en tant que fichier sortant: json.dump (review_info_copy, fichier externe)
Voici le complet followup_request
méthode:
def followup_request (): with open ('reviewer.json', 'r') sous le nom jfile: review_info = json.load (jfile) review_info_copy = copier (review_info) email_info = read_email (no_days) pour examen dans review_info: review_replied = False attendu = 'Re:' + review ['subject'] pour le courrier électronique dans email_info: ifspect_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']) break; if review_info_copy! = review_info: avec open ('reviewer.json', 'w') en tant que fichier sortant: json.dump (review_info_copy, fichier externe)
Appeler le followup_request
méthode de suivi des demandes de révision déjà envoyées.
try: commits = process_commits () # Ajout de la méthode de suivi followup_request () if len (commits) == 0: print "Aucun commits trouvé"; sinon: schedule_review_request (commits) sauf Exception, e: print "Une erreur s'est produite. Consultez le journal pour plus de détails. ' logger.error (str (datetime.datetime.now ()) + - Une erreur s'est produite: "+ str (e) +" \ n ") logger.exception (str (e))
Enregistrez les modifications ci-dessus. Pour tester la fonctionnalité suivante, supprimez le reviewer.json
fichier du répertoire du projet. Exécutez maintenant le planificateur afin que les demandes de révision de code soient envoyées à des développeurs aléatoires. Vérifiez si ces informations ont été enregistrées dans le reviewer.json
fichier.
Demandez au développeur en question de répondre à la demande de révision du code en répondant au courrier électronique. Maintenant, exécutez à nouveau le planificateur, et cette fois le programme devrait pouvoir trouver la réponse et la supprimer du reviewer.json
fichier.
Une fois que le réviseur a répondu aux courriels de demande de révision du code, ces informations doivent être supprimées de la liste. reviewer.json
fichier puisque vous n'avez pas besoin de le suivre plus loin. Si le réviseur n'a pas encore répondu à la demande de révision du code, vous devez lui envoyer un courrier de suivi lui rappelant la demande de révision..
Le planificateur de révision de code serait exécuté quotidiennement. Lors de son exécution, vous devez d’abord vérifier si cela fait un certain temps que le développeur a répondu à la demande de révision. Dans la configuration du projet, vous pouvez définir une période de révision au cours de laquelle, si le réviseur n'a pas répondu, le planificateur enverra un courrier électronique de rappel..
Commençons par ajouter une configuration dans la configuration du projet. Ajouter une nouvelle configuration appelée suite_fréquence
dans le fichier de configuration.
"name": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "followup_frequency": 2, "members": ["[email protected]", "samon @ gmail .com "," [email protected] "," [email protected] "]
Donc, quand le relecteur n’a pas répondu pour suite_fréquence
nombre de jours, vous enverrez un email de rappel. Lisez la configuration dans une variable globale en lisant les configurations:
pour p dans main_config: if p ['nom'] == projet: project_url = p ['git_url'] project_members = p ['membres'] followup_frequency = p ['followup_frequency'] break
À l'intérieur de followup_request
En cas de problème, envoyez un e-mail de rappel lorsque le relecteur n’a pas répondu aux demandes de suivi de la demande. suite_fréquence
nombre de jours. Calculez le nombre de jours depuis l'envoi de l'avis.
review_date = datetime.datetime.strptime (review ['sendDate'], '% Y-% m-% d') today = datetime.datetime.today () days_since_review = (today - review_date) .days
Si le nombre de jours est supérieur à la date de la fréquence de suivi dans les configurations, envoyez un e-mail de rappel..
sinon review_replied: if days_since_review> followup_frequency: send_email (review ['reviewer'], 'Rappel:' + review ['subject'], '\ \ nVous n'avez pas répondu à la demande d'examen \ n')
Voici le complet followup_request
méthode:
def followup_request (): with open ('reviewer.json', 'r') en tant que jfile: review_info = json.load (jfile) review_info_copy = copier (review_info) email_info = read_email (no_days) pour examen dans review_info: review_date = datetime. datetime.strptime (review ['sendDate'], '% Y-% m-% d') today = datetime.datetime.today () days_since_review = (today - review_date) .days review_replied = False attendu_subject = 'Re:' + review ['sujet'] pour le courrier électronique dans email_info: ifS'attendu_subject == email ['Objet']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']) break; sinon review_replied: if days_since_review> followup_frequency: send_email (review ['reviewer'], 'Rappel:' + review ['sujet'], '\ nVous n'avez pas répondu à la demande d'examen \ n') si review_info_copy! = review_info: avec open ('reviewer.json', 'w') comme fichier de sortie: json.dump (review_info_copy, fichier de sortie)
Dans ce didacticiel, vous avez vu comment implémenter la logique de suivi des demandes de révision de code. Vous avez également ajouté la fonctionnalité permettant d'envoyer un courrier électronique de rappel si le réviseur n'a pas répondu au courrier électronique pendant un certain nombre de jours..
Ce réviseur de code Python peut être encore amélioré pour répondre à vos besoins. Déchiffrer le référentiel et ajouter de nouvelles fonctionnalités, et laissez-nous savoir dans les commentaires ci-dessous.
Le code source de ce tutoriel est disponible sur GitHub.