Nella terza parte di questa serie, hai visto come salvare le informazioni sulla richiesta di revisione del codice per il follow-up. Hai creato un metodo chiamato read_email
per recuperare le e-mail dalla posta in arrivo per verificare se un revisore ha risposto alla richiesta di revisione del codice. Hai implementato anche la gestione degli errori nel codice dello scheduler di revisione del codice.
In questa parte della serie, utilizzerai le informazioni sulla revisione del codice salvate e le informazioni delle e-mail per verificare se il revisore ha risposto alla richiesta di revisione. Se a una richiesta non è stata data risposta, invierai un'email di follow-up al revisore.
Inizia clonando il codice sorgente dalla terza parte della serie di tutorial.
git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Modifica il config.json
file per includere alcuni indirizzi e-mail pertinenti, mantenendo il file [email protected]
indirizzo email. È perché git ha commit relativi a questo particolare indirizzo email che sono richiesti per l'esecuzione del codice come previsto. Modifica il SMTP
credenziali nel schedule.py
file:
FROM_EMAIL = "[email protected]" FROM_PWD = "tua_password"
Passare alla directory del progetto CodeReviewer
e prova ad eseguire il seguente comando nel terminale.
python scheduler.py -n 20 -p "project_x"
Dovrebbe inviare la richiesta di revisione del codice agli sviluppatori casuali per la revisione e creare un reviewer.json
file con informazioni di revisione.
Iniziamo creando un metodo di richiesta di follow-up chiamato followup_request
. Dentro il followup_request
metodo, leggi il reviewer.json
file e mantenere il contenuto in un elenco. Ecco come appare il codice:
con open ('reviewer.json', 'r') come jfile: review_info = json.load (jfile)
Quindi, inserire le informazioni e-mail utilizzando il read_email
metodo che hai implementato nell'ultimo tutorial.
email_info = read_email (no_days)
Se il revisore ha risposto alla richiesta di revisione, dovrebbe esserci un'e-mail con lo stesso oggetto e a Ri:
tag prefissato. Quindi, scorrere l'elenco delle informazioni sulla recensione e confrontare l'oggetto della recensione con l'oggetto dell'email per vedere se il revisore ha risposto alla richiesta.
per revisione in review_info: review_replied = false expected_subject = 'RE:' + review ['subject'] per email in email_info: if expected_subject == email ['subject']: review_replied = Stampa true 'L'autore ha risposto' break;
Come visto nel codice sopra, hai iterato attraverso il review_info
elencare e controllare l'oggetto della recensione rispetto all'oggetto dell'email per vedere se il revisore ha risposto.
Ora, una volta che il revisore ha risposto alla richiesta di revisione del codice, non è necessario conservare le particolari informazioni di revisione nel reviewer.json
file. Quindi creare un metodo Python chiamato Delete_Info
rimuovere le informazioni di revisione particolare dal reviewer.json
file. Ecco come Delete_Info
sembra:
def Delete_Info (info, id): per i in xrange (len (informazioni)): if info [i] ['id'] == id: info.pop (i) interruzione informazioni di ritorno
Come visto nel codice sopra, hai ripetuto l'elenco delle informazioni sulla recensione e cancellato la voce che corrisponde all'Id. Dopo aver rimosso le informazioni dal file, restituire l'elenco.
Devi chiamare il Delete_Info
metodo quando viene fornita una particolare informazione di revisione. Quando si chiama il Delete_Info
metodo, è necessario passare una copia del review_info
in modo che l'elenco delle informazioni originali non venga modificato. Avrai bisogno della lista di informazioni di revisione originale per il confronto più tardi. Quindi importa il copia
Modulo Python per creare una copia dell'elenco di informazioni di revisione originale.
dalla copia copia di importazione
Crea una copia di review_info
elenco.
review_info_copy = copia (review_info)
Quando si eliminano le informazioni di revisione a cui è stata data risposta dall'elenco originale, passare l'elenco delle copie al file Delete_Info
metodo.
review_info_copy = Delete_Info (review_info_copy, review ['id'])
Ecco il followup_request
metodo:
def followup_request (): con open ('reviewer.json', 'r') come jfile: review_info = json.load (jfile) review_info_copy = copia (review_info) email_info = read_email (no_days) per la revisione in review_info: review_replied = False expected_subject = 'Re:' + recensione ['oggetto'] per email in email_info: if expected_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id ']) break;
Ora, una volta il review_info
elenco è stato iterato, è necessario controllare se ci sono cambiamenti nel reviewer.json
file. Se sono state rimosse tutte le informazioni di revisione esistenti, è necessario aggiornare il reviewer.json
file in modo appropriato. Quindi controlla se review_info_copy
e review_info
sono uguali e aggiorna il reviewer.json
file.
se review_info_copy! = review_info: con open ('reviewer.json', 'w') come outfile: json.dump (review_info_copy, outfile)
Ecco il completo followup_request
metodo:
def followup_request (): con open ('reviewer.json', 'r') come jfile: review_info = json.load (jfile) review_info_copy = copia (review_info) email_info = read_email (no_days) per la revisione in review_info: review_replied = False expected_subject = 'Re:' + recensione ['oggetto'] per email in email_info: if expected_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id ']) break; se review_info_copy! = review_info: con open ('reviewer.json', 'w') come outfile: json.dump (review_info_copy, outfile)
Chiama il followup_request
metodo per seguire le richieste di revisione che sono già state inviate.
try: commits = process_commits () # Aggiunto il metodo followup followup_request () if len (commit) == 0: print 'No commit found' else: schedule_review_request (commit) tranne Exception, e: print 'Si è verificato un errore. Controlla il registro per i dettagli. ' logger.error (str (datetime.datetime.now ()) + "- Errore:" + str (e) + "\ n") logger.exception (str (e))
Salva le modifiche precedenti. Per testare la funzionalità di follow-up, eliminare il reviewer.json
file dalla directory del progetto. Ora esegui lo scheduler in modo che le richieste di revisione del codice vengano inviate agli sviluppatori casuali. Controlla se tali informazioni sono state salvate nel reviewer.json
file.
Chiedere al particolare sviluppatore di rispondere alla richiesta di revisione del codice rispondendo all'e-mail. Ora eseguire di nuovo lo scheduler e questa volta il programma di pianificazione dovrebbe essere in grado di trovare la risposta e rimuoverla dal reviewer.json
file.
Una volta che il revisore ha risposto alle e-mail di richiesta di revisione del codice, tali informazioni devono essere rimosse dal reviewer.json
file poiché non è necessario rintracciarlo ulteriormente. Se il revisore non ha ancora risposto alla richiesta di revisione del codice, è necessario inviare una mail di follow-up per ricordargli la richiesta di revisione.
Lo scheduler di revisione del codice dovrebbe essere eseguito su base giornaliera. Quando viene eseguito, per prima cosa è necessario verificare se è trascorso un certo periodo di tempo poiché lo sviluppatore ha risposto alla richiesta di revisione. Nella configurazione del progetto, è possibile impostare un periodo di revisione durante il quale, se il revisore non ha risposto, lo scheduler invierà un'e-mail di sollecito.
Iniziamo aggiungendo una configurazione nella configurazione del progetto. Aggiungi una nuova configurazione chiamata followup_frequency
nel file di configurazione.
"nome": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "followup_frequency": 2, "membri": ["[email protected]", "samon @ gmail .com "," [email protected] "," [email protected] "]
Quindi, quando il revisore non ha risposto per followup_frequency
numero di giorni, invierai un'email di promemoria. Leggi la configurazione in una variabile globale durante la lettura delle configurazioni:
per p in main_config: if p ['name'] == progetto: project_url = p ['git_url'] project_members = p ['members'] followup_frequency = p ['followup_frequency'] break
Dentro il followup_request
metodo, inviare un'e-mail di promemoria quando il revisore non ha risposto alle richieste di follow-up per followup_frequency
numero di giorni. Calcola il numero di giorni dall'invio della revisione.
review_date = datetime.datetime.strptime (recensione ['sendDate'], '% Y-% m-% d') today = datetime.datetime.today () days_since_review = (today - review_date) .days
Se il numero di giorni è maggiore della data di frequenza di follow-up nelle configurazioni, inviare l'e-mail di promemoria.
se non review_replied: if days_since_review> followup_frequency: send_email (recensione ['reviewer'], 'Promemoria:' + recensione ['oggetto'], '\ nNon hai risposto alla richiesta di revisione \ n')
Ecco il completo followup_request
metodo:
def followup_request (): con open ('reviewer.json', 'r') come jfile: review_info = json.load (jfile) review_info_copy = copia (review_info) email_info = read_email (no_days) per la revisione in review_info: review_date = datetime. datetime.strptime (recensione ['sendDate'], '% Y-% m-% d') today = datetime.datetime.today () days_since_review = (today - review_date) .days review_replied = False expected_subject = 'Re:' + rivedere ['subject'] per email in email_info: if expected_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']) break; if not review_replied: if days_since_review> followup_frequency: send_email (recensione ['revisore'], 'Promemoria:' + recensione ['oggetto'], '\ nNon hai risposto alla richiesta di revisione \ n') se review_info_copy! = review_info: con open ('reviewer.json', 'w') come outfile: json.dump (review_info_copy, outfile)
In questo tutorial, hai visto come implementare la logica per seguire le richieste di revisione del codice. Hai anche aggiunto la funzionalità per inviare un'e-mail di promemoria se il revisore non ha risposto all'e-mail per un certo numero di giorni.
Questo revisore di codice Python può essere ulteriormente migliorato per soddisfare le tue esigenze. Distribuisci il repository e aggiungi nuove funzionalità e faccelo sapere nei commenti seguenti.
Il codice sorgente di questo tutorial è disponibile su GitHub.