În această serie de tutori, veți vedea cum să creați un programator de recenzii de cod folosind Python. De-a lungul acestei serii, veți acoperi unele concepte de bază cum ar fi citirea e-mailurilor, trimiterea unui e-mail, executarea comenzilor terminale din programul Python, procesarea jurnalelor git, etc.
În prima parte, veți începe prin configurarea fișierelor de configurare de bază, citirea jurnalelor git și prelucrarea lor pentru trimiterea cererii de revizuire a codului.
Începeți prin crearea unui dosar de proiect numit CodeReviewer
. În interiorul CodeReviewer
folder, creați un fișier numit scheduler.py
.
Presupunând că planificatorul de revizuire a codului va fi rulat împotriva mai multor proiecte, va trebui să specificați numele proiectului pe care rulează schedulerul și numărul de zile pentru care jurnalul trebuie să fie procesat. Deci, citiți mai întâi acești doi parametri ca argumente din programul de examinare a codului.
Să folosim argparse
Modul Python pentru citirea parametrilor programului. Importați biblioteca și adăugați argumentele programului. Puteți utiliza funcția ArgumentParser
metodă a argparse
modul de inițiere a parserului. După ce a fost inițiat, puteți adăuga argumentele la parser. Iată codul pentru citirea argumentelor din program:
import argparse parser = argparse.ArgumentParser parser.add_argument ("- n", nargs = "?", type = int, default = 1, help = "Număr de (d) "parser.add_argument (" - p ", nargs ="? ", tip = str, default =" em ", ajutor =" Numele proiectului ") args = parser.parse_args () no_days = args. n project = args.p print 'Prelucrarea planificatorului contra proiectului' + proiect + '...'
Să menținem un fișier de configurare separat, care va fi procesat de către recenzentul de cod. Creați un fișier numit config.json
în directorul proiectului CodeReviewer
. În interiorul fișierului de configurare, vor fi disponibile informații despre fiecare proiect care va fi procesat. Iata cum ar arata fisierul de configurare al proiectului:
"nume": "proiect_x", "git_url": "https://github.com/royagasthyan/project_x", "nume": "proiect_y", "git_url": "https://github.com / royagasthyan / project_y "]
Mai multe opțiuni ar fi adăugate la configurațiile proiectului în părțile ulterioare.
Să citim configurația JSON
fișier în programul Python. Importați JSON
modul și încărcați JSON
datele citite din fișierul de configurare.
# # Citiți fișierul de configurare a planificatorului # cu deschis ('config.json') ca cfg_file: main_config = json.load (cfg_file)
Când se execută scriptul de examinare, numele proiectului este specificat ca parametru. Pe baza numelui de proiect specificat, verificați dacă configurațiile sale sunt disponibile și clonați depozitul.
În primul rând, trebuie să găsiți adresa URL a proiectului din configurații. Iterați datele proiectului și găsiți adresa URL a proiectului așa cum este prezentat:
pentru p în main_config: dacă p ['name'] == project: project_url = p ['git_url'] break
Odată ce aveți adresa URL a proiectului, verificați dacă proiectul este deja clonat. Dacă nu, clonați adresa URL a proiectului. Dacă există deja, navigați la directorul de proiect existent și trageți ultimele modificări.
# Clonează repozitoriul dacă nu există deja print "********* Efectuarea verificării proiectului **********" dacă (os.path.isdir ("./" + project)): execute_cmd ("git clone" + project_url + "" + project) tipăriți "*** Done *******" print "" execute_cmd ("
Pentru a executa comenzile de sistem, veți folosi Python-ul os
modul. Creați o metodă de executare a comenzilor de sistem, deoarece o veți utiliza frecvent. Aici este execute_cmd
metodă:
def execute_cmd (cmd): print "***** Executarea comenzii" "+ cmd +" '"răspuns = os.popen (cmd) .read
După preluarea jurnalului de comiteri din depozitul Git, veți analiza jurnalul. Creați o nouă metodă Python numită process_commits
pentru a procesa jurnalele Git.
def process_commits (): # code ar fi aici
Git ne oferă comenzile pentru a obține jurnalul de angajament. Pentru a obține toate jurnalele dintr-un depozit, comanda ar fi:
git log - toate
Răspunsul ar fi:
comită 04d11e21fb625215c5e672a93d955f4a176e16e4 Autor: royagasthyanData: Miercuri 8 Feb 21:41:20 2017 +0530 Creați README.md
De asemenea, puteți obține jurnale specifice numărului de zile de la executarea comenzii. Pentru a obține jurnale de la n numărul de zile, comanda ar fi:
git log - tot - de la = n
Puteți să o restrângeți mai departe pentru a vedea dacă o anumită comitet a fost o adăugare, o modificare sau o ștergere. Executați comanda de mai sus cu --nume de stare
:
git log - toate - de la = 10. zile - nume-stare
Comanda de mai sus ar avea următoarea ieșire:
comită 04d11e21fb625215c5e672a93d955f4a176e16e4 Autor: royagasthyanData: Miercuri 8 Feb 21 21:41:20 2017 +0530 Creare README.md A README.md
A
litera din partea stângă a paginii README.md
fișierul indică adăugarea. asemănător, M
ar indica modificarea și D
ar indica ștergerea.
În interiorul process_commits
, să definim comanda Git care trebuie executată pentru a obține istoricul jurnalului.
cmd = "cd" + proiect + "; git log --all --since =" + str (no_days) + ".day - nume-status"
Treceți comanda de mai sus cmd
la execute_cmd
metodă.
răspuns = execute_cmd (cmd)
Citiți răspunsul, repetați fiecare linie și imprimați același lucru.
Definiți proces_commits (): cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day - nume-statut" reply = execute_cmd (cmd) .splitlines (): linia de imprimare
Apelați la process_commits
după ce configurațiile au fost citite.
print 'Prelucrarea planificatorului împotriva proiectului' + proiect + '...' process_commits ()
Salvați modificările de mai sus și încercați să executați recenzorul de cod folosind următoarea comandă:
python scheduler.py -n 10 -p "proiect_x"
După cum puteți vedea, am început evaluatorul codului cu numărul de zile și numele proiectului să fie procesat. Ar trebui să puteți vedea următoarea ieșire:
********* Efectuarea verificării proiectului ********** ***** Executarea comenzii 'cd project_x; git trageți '*** Încheiat ******* Prelucrarea planificatorului împotriva proiectului project_x ... ***** Executarea comenzii' cd project_x; git log --all --since = 10.day --name-status 'commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Autor: royagasthyanData: Miercuri 8 Feb 21 21:41:20 2017 +0530 Creare README.md A README.md
Deci, când executați recenzorul de cod, puteți vedea că depozitul este creat dacă acesta nu există deja sau altfel este actualizat. După aceea, în funcție de numărul de zile furnizate, acesta preia istoricul istoricului de comitete pentru procesare.
Acum, să analizăm jurnalul de angajament pentru a afla ID-ul de comitere, data comiterii și autorul comiterii.
După cum se vede în jurnale, id-ul de comitere începe cu cuvântul cheie comite
, autorul începe cu cuvântul cheie Autor:
, iar data începe cu cuvântul cheie Data:
. Veți utiliza următoarele cuvinte cheie pentru a identifica codul de comitet, autorul și data pentru o comitet.
Să încercăm să obținem ID-ul de comitere din liniile de logare Git. Acest lucru este destul de simplu. Trebuie doar să verificați dacă linia începe cu cuvântul cheie comite
.
pentru linia în answer.splitlines (): if line.startswith ('commit'): print line [7:]
Salvați modificările și executați planificatorul și ar trebui să puteți obține codul de comitet.
Următoarea sarcină este să extrageți numele autorului. Pentru a verifica dacă linia conține informațiile despre autor, mai întâi verificați dacă linia începe cu Autor
cuvinte cheie. Dacă da, veți folosi o expresie regulată pentru a obține utilizatorul.
După cum puteți vedea, adresa de e-mail a utilizatorului este în interiorul semnelor "mai puțin decât mai mare decât". Vom folosi o expresie regulată pentru a citi adresa de e-mail între < >
. Expresia obișnuită va fi astfel:
„\<(.*?)\>'
Importați Python-ul re
modul de utilizare a expresiilor regulate în Python.
import re
Acum verificați dacă linia începe cu Autor
cuvinte cheie. În caz contrar, extrageți adresa de e-mail a utilizatorului utilizând expresia obișnuită de mai sus. Iată cum ar arăta:
dacă line.startswith ('Autor:'): if (re.search ('<(.*?)\>', linie)): print re.search ('<(.*?)\>“, Linia) .group (1)
Pentru a extrage data de comutare din jurnal, trebuie să verificați dacă linia începe cu Data
cuvinte cheie. Iată cum ar arăta:
dacă line.startswith ('Data:'): print line [5:]
Aici este finala process_commits
metodă:
Definiți proces_commits (): cmd = "cd" + project + "; git log --all --since =" + str (no_days) + ".day - nume-statut" reply = execute_cmd (cmd) .splitlines (): dacă line.startswith ('commit'): print line [7:] dacă line.startswith ('Autor:')<(.*?)\>', linie)): print re.search ('<(.*?)\>', linia) .group (1) if line.startswith (' Date: '): print line [5:]
Salvați modificările de mai sus și porniți recenzorul de cod.
python scheduler.py -n 10 -p "proiect_x"
Ar trebui să aveți fiecare detaliu de comitere cu codul de comitet, data autorului și data comenzii imprimate pe terminal.
În această primă parte a planificatorului de revizuire a codului Python, ați văzut cum să configurați proiectul. Citiți parametrii de intrare solicitați de programator pentru a procesa proiectul. În următoarea parte a acestei serii de tutori, vom colecta detaliile de comitet de la process_commits
și trimiteți comitetele pentru dezvoltatorii aleatorii pentru revizuirea codului.
Nu ezitați să vedeți ce avem la dispoziție pentru vânzare și pentru studiul pe piața Envato Market și nu ezitați să întrebați întrebări și să furnizați feedback-ul dvs. valoros utilizând feedul de mai jos.
Sper că ți-a plăcut prima parte. Spuneți-ne gândurile sau sugestiile din comentariile de mai jos.
Codul sursă din acest tutorial este disponibil pe GitHub.