În cea de-a treia parte a acestei serii, ați văzut cum să salvați informațiile de solicitare de revizuire a codului pentru urmărire. Ați creat o metodă numită read_email
pentru a prelua mesajele e-mail din căsuța de e-mail pentru a verifica dacă un comentator a răspuns la solicitarea de revizuire a codului. Ați implementat, de asemenea, gestionarea erorilor în codul de programare a codului de examinare.
În această parte a seriei, veți utiliza informațiile de revizuire a codului salvate și informațiile din e-mailuri pentru a verifica dacă recenzorul a răspuns la solicitarea de examinare. Dacă nu ați răspuns la o solicitare, veți trimite un e-mail de urmărire către recenzent.
Începeți prin clonarea codului sursă din a treia parte a seriei tutorial.
git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Modificați config.json
fișier pentru a include unele adrese de e-mail relevante, păstrarea [email protected]
adresa de email. Acest lucru se datorează faptului că git are angajamente legate de această adresă de e-mail specială, care sunt necesare pentru executarea codului conform așteptărilor. Modificați SMTP
acreditări în schedule.py
fişier:
FROM_EMAIL = "[email protected]" FROM_PWD = "parola dvs."
Navigați la directorul proiectului CodeReviewer
și încercați să executați următoarea comandă în terminal.
python scheduler.py -n 20 -p "proiect_x"
Acesta ar trebui să trimită cererea de revizuire a codului pentru dezvoltatorii aleatorii pentru revizuire și să creeze o reviewer.json
fișier cu informații de recenzie.
Să începem prin crearea unei metode de solicitare de urmărire numită followup_request
. În interiorul followup_request
metoda, citiți reviewer.json
fișier și păstrați conținutul într-o listă. Iată cum arată codul:
cu open ('reviewer.json', 'r') ca jfile: review_info = json.load (jfile)
Apoi, trageți informațiile despre e - mail folosind read_email
metoda pe care ați implementat-o în ultimul tutorial.
email_info = read_email (no_days)
Dacă recenzorul a răspuns la solicitarea de examinare, ar trebui să existe un e-mail cu același subiect și a Re:
etichetă prefixată la acesta. Deci, iterați prin lista de informații de revizuire și comparați subiectul revizuirii cu subiectul e-mailului pentru a vedea dacă recenzorul a răspuns solicitării.
pentru revizuire în review_info: review_replied = false expected_subject = 'RE:' + revizuire ['subject'] pentru e-mail în email_info: if expected_subject == email ['subject']: review_replied = True print 'Referentul a răspuns' break;
După cum se vede în codul de mai sus, ați repetat prin review_info
afișați și verificați subiectul mesajului de recenzie în fața subiectului de e-mail pentru a vedea dacă recenzorul a răspuns.
Acum, după ce evaluatorul a răspuns la solicitarea de revizuire a codului, nu este necesar să păstrați informațiile de revizuire specifice în reviewer.json
fişier. Deci, creați o metodă Python numită delete_info
pentru a elimina informațiile de revizuire de la reviewer.json
fişier. Iată cum delete_info
arată:
Definiți parametrul de ștergere (info, id): pentru i în xrange (len (info)): dacă info [i] ['id'] == id: info.pop
După cum se vede în codul de mai sus, ați reușit să treceți prin lista de informații de revizuire și ați șters intrarea care corespunde codului de identificare. După eliminarea informațiilor din fișier, returnați lista.
Trebuie să sunați delete_info
atunci când se răspunde la o anumită informație de revizuire. Când sunați delete_info
metodă, trebuie să transmiteți o copie a textului review_info
astfel încât lista informativă originală să nu fie modificată. Veți avea nevoie de lista de informații despre recenziile originale pentru comparație mai târziu. Deci importă copie
Modul Python pentru a crea o copie a listei de informații originale de revizuire.
din copia importului copiei
Creați o copie a fișierului review_info
listă.
review_info_copy = copy (review_info)
Când ștergeți informațiile de recenzie la care a răspuns din lista originală, treceți lista de copiere la delete_info
metodă.
review_info_copy = Delete_Info (review_info_copy, revizuire ['id'])
Aici este followup_request
metodă:
def followup_request (): cu open ('reviewer.json', 'r') ca jfile: review_info = json.load (jfile) review_info_copy = copy_control_info = email_info = read_email = 'Re:' + revizuire ['subiect'] pentru e-mail în email_info: if expected_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']) break;
Acum, odată review_info
lista a fost repetată, trebuie să verificați dacă există modificări în reviewer.json
fişier. Dacă au fost eliminate orice informații de recenzie existente, trebuie să le actualizați reviewer.json
fișier corespunzător. Deci, verificați dacă review_info_copy
și review_info
sunt aceleași și actualizați reviewer.json
fişier.
dacă review_info_copy! = review_info: cu open ('reviewer.json', 'w') ca outfile: json.dump (review_info_copy, outfile)
Aici este completă followup_request
metodă:
def followup_request (): cu open ('reviewer.json', 'r') ca jfile: review_info = json.load (jfile) review_info_copy = copy_control_info = email_info = read_email = 'Re:' + revizuire ['subiect'] pentru e-mail în email_info: if expected_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']) break; dacă review_info_copy! = review_info: cu open ('reviewer.json', 'w') ca outfile: json.dump (review_info_copy, outfile)
Apelați la followup_request
metodă de urmărire a solicitărilor de revizuire care au fost deja trimise.
încercați: commits = process_commits () # A adăugat următoarea metodă followup_request () if len (commits) == 0: print 'Nu există comitete găsite altfel: schedule_review_request (commits) excepție Exception, e: print' Verificați jurnalul pentru detalii. " logger.error (str (datetime.datetime.now ()) + "- Eroare a apărut:" + str (e) + "\ n") logger.exception
Salvați modificările de mai sus. Pentru a testa funcționalitatea de urmărire, ștergeți reviewer.json
fișier din directorul de proiect. Acum rulați programatorul astfel încât cererile de revizuire a codului să fie trimise dezvoltatorilor aleatorii. Verificați dacă informațiile respective au fost salvate în reviewer.json
fişier.
Cereți dezvoltatorului special să răspundă la solicitarea de revizuire a codului răspunzând la e-mail. Acum rulați din nou planificatorul și de această dată programul de programare ar trebui să găsească răspunsul și să îl elimine din reviewer.json
fişier.
Odată ce recenzentul a răspuns la e-mailurile de solicitare de revizuire a codului, aceste informații trebuie să fie eliminate din reviewer.json
deoarece nu aveți nevoie să îl urmăriți mai departe. Dacă recenzentul nu a răspuns încă la solicitarea de examinare a codului, trebuie să trimiteți un e-mail de urmărire pentru a-i reaminti despre solicitarea de examinare.
Planificatorul de revizuire a codului ar funcționa zilnic. Când este rulat, trebuie mai întâi să verificați dacă a fost un anumit timp după ce dezvoltatorul a răspuns la solicitarea de revizuire. În configurația proiectului, puteți seta o perioadă de examinare în care, dacă recenzentul nu a răspuns, planificatorul va trimite un e-mail de reamintire.
Să începem prin adăugarea unei configurații în configurația de proiect. Adăugați o nouă configare numită followup_frequency
în fișierul de configurare.
"nume": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "followup_frequency": 2, "membri": ["[email protected]", "samon @ gmail .com "," [email protected] "," [email protected] "]]
Deci, când recenzorul nu a răspuns followup_frequency
numărul de zile, veți trimite un e-mail de memento. Citiți configurația într-o variabilă globală în timp ce citiți configurațiile:
pentru p în main_config: dacă p ['name'] == proiect: project_url = p ['git_url'] project_members = p ['members'] followup_frequency = p ['followup_frequency'
În interiorul followup_request
, trimiteți un e-mail de reamintire atunci când recenzorul nu a răspuns la solicitările de urmărire followup_frequency
număr de zile. Calculați numărul de zile de la trimiterea recenziei.
review_date = datetime.datetime.strptime (revizuire ['sendDate'], '% Y-% m-% d') astăzi = datetime.datetime.today () days_since_review = (astăzi - review_date).
Dacă numărul de zile este mai mare decât data frecvenței de urmărire în configurații, trimiteți e-mailul de memento.
dacă nu review_replied: if days_since_review> followup_frequency: send_email (revizuiți ['reviewer'], 'Reminder:' + review ['subject'], '\ nNu ați răspuns la solicitarea de recenzie \ n')
Aici este completă followup_request
metodă:
def followup_request (): cu open ('reviewer.json', 'r') ca jfile: review_info = json.load (jfile) review_info_copy = copie (review_info) email_info = read_email (no_days) pentru review in review_info: review_date = datetime. datetime.strptime (revizuire ['sendDate'], '% Y-% m-% d') astăzi = datetime.datetime.today () days_since_review = (today - review_date) .days review_replied = recenzie ['subiect'] pentru e-mailul în email_info: if expected_subject == email ['Subject']: review_replied = True review_info_copy = Delete_Info (review_info_copy, review ['id']); dacă nu review_replied: if days_since_review> followup_frequency: send_email (revizuire ['reviewer'], 'Reminder:' + review ['subject'], '\ nDacă review_info_copy! = review_info: cu open ('reviewer.json', 'w') ca outfile: json.dump (review_info_copy, outfile)
În acest tutorial, ați văzut cum să implementați logica pentru a urmări solicitările de revizuire a codului. De asemenea, ați adăugat funcționalitatea pentru a trimite un e-mail de reamintire dacă recenzentul nu a răspuns la e-mail pentru un anumit număr de zile.
Acest reviewer de cod Python poate fi îmbunătățit în continuare pentru a vă satisface nevoile. Faceți furcă depozitul și adăugați funcții noi și anunțați-ne în comentariile de mai jos.
Codul sursă din acest tutorial este disponibil pe GitHub.