I første del av opplæringsserien så du hvordan du konfigurerer prosjektet og de nødvendige konfigurasjonene. Du har behandlet prosjektgitloggene og skrevet ut dem i terminalen. I denne delen tar vi det til neste nivå og sender ut forespørsler om kodeanmeldelse.
Start med å klone kildekoden fra første del av opplæringsserien.
git klon https://github.com/royagasthyan/CodeReviewer CodeReviewer
Når du har klonet depotet, navigerer du til prosjektkatalogen CodeReviewer
og prøv å utføre følgende kommando i terminalen.
python scheduler.py -n 20 -p "project_x"
Det skal skrive ut commit-IDene, forlovelsesdatoen og forplikterforfatteren i terminalen.
Du får tilsagnsdetaljene mens du gjør det på nytt. Nå må du samle detaljer og lagre dem i en liste, slik at du kan iterere dem senere for å sende ut kodenevalueringsforespørselen. For å samle de forpliktende detaljer, start ved å lage en Begå
klasse med de nødvendige medlemmene som vist:
# ------------------------------------------- # # Forlovelsesklasse skal inneholde begå relatert info # # ------------------------------------------- klasse Commit : def __init __ (selv, Id, Forfatter, Dato): self.Id = Id; self.Author = Forfatter; self.Date = Date;
Mens iterating commit loggene i process_commits
metode, opprett en Begå
eksempel for å beholde detaljen.
I process_commits
metode, definer noen få variabler som vist:
commitId = "author =" date = "commits = []
Du samler hver enkelt detalj i en Python-liste som heter forplikter
. Mens du leser bindingsloggene, holder du først commit-IDen og sparer dato og forfattervariabler, siden det er en ny forpliktelse. Endre process_commits
Metodekode etter at søkeordet har sjekket som vist:
hvis line.startswith ('commit'): author = "date =" commitId = line [7:]
Når commit-ID-en ikke er null, er det da tilsagnsdetaljene er samlet, og det er på tide å legge til forpliktelsen til commit-listen. Legg til følgende linje med kode til koden ovenfor:
hvis line.startswith (commit): hvis commitId <> ": commits.append (Commit (commitId, author, date)) author =" date = "commitId = linje [7:]
Endre Forfatter
søkeordkontroll og Dato
Søkeordet sjekk for å beholde de respektive begivenhetsdetaljer i forfatter- og datovariablene.
hvis line.startswith ('Author:'): if (re.search ('\<(.*?)\>', linje)): forfatter = re.search (' \<(.*?)\>', linje) .gruppe (1) hvis line.startswith (' Dato: '): dato = linje [5:]
Nå, hvis det bare er ett begå i kildekoden, blir detaljene lagret inne i commitlisten. Så legg til følgende kode til slutten av sløyfen for å håndtere dette scenariet.
hvis commitId <> "": commits.append (Commit (commitId, author, date))
Her er komplett process_commits
Metode som samler forpliktelsesdetaljer og returnerer en liste over forpliktelser.
# ---------------------------------- # # Behandle git loggen # # ------- --------------------------- def process_commits (): cmd = "cd" + prosjekt + "; git logg --all - siden = "+ str (no_days) +" .dag - navn-status "respons = execute_cmd (cmd) commitId =" author = "date =" commits = [] for linje i response.splitlines (): hvis line.startswith "commit"): hvis commitId <> ": commit.append (Commit (commitId, author, date)) author =" date = "commitId = linje [7:] hvis line.startswith ('Author:') (forskning('\<(.*?)\>', linje)): forfatter = re.search (' \<(.*?)\>'linje' .gruppe (1) hvis line.startswith ('Date:'): date = line [5:] hvis commitId <> ": commit.append (Commit (commitId, author, date)
Du har begjæringsdetaljer samlet fra prosjektloggen. Du må velge tilfeldige utviklere for å sende kodenevalueringsforespørselen. Inne i config.json
fil, la oss legge til utviklerne knyttet til prosjektet som kan gjennomgå koden. Her er den endrede config.json
fil:
["navn": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "members": ["royagasthyan", "hari", "sam", "shaun"] , "navn": "project_y", "git_url": "https://github.com/royagasthyan/project_y", "members": ["royagasthyan", "hari", "sam", "shaun"] ]
La oss lese utviklerens info relatert til et bestemt prosjekt. Definer en offentlig variabel som heter project_members
.
project_members = "
Når du leser prosjektkonfigurasjonene, fyller du inn prosjektdelens detaljer i project_members
liste variabel.
# # Les planleggerkonfigurasjonsfilen # med åpen ('config.json') som cfg_file: main_config = json.load (cfg_file) for p i main_config: hvis p ['navn'] == prosjekt: project_url = p ['git_url '] project_members = p [' members '] pause
Nå har du utviklerlisten knyttet til et bestemt prosjekt i project_members
variabel.
Definer en metode som kalles schedule_review_request
som du vil ringe for å planlegge forespørselsforespørselen som svarer til hvert prosjektforpliktelse. Bedriftsforespørselen vil bli sendt til en tilfeldig utvikler fra project_members
liste, unntatt forfatteren.
Opprett en metode som kalles select_reviewer
for å velge tilfeldig utvikler fra project_members
liste. For å velge tilfeldige utviklere fra listen, vil du gjøre bruk av tilfeldig
Python-modul. Importer tilfeldig
Python-modul.
Import tilfeldig
Slik ser koden ut:
# ----------------------------------------- # # Metode for å velge tilfeldig gransker # # ----------------------------------------- def select_reviewer (forfatter, gruppe): hvis forfatter i gruppe: group.remove (author) reviewer = random.choice (gruppe) returrevisor
Som vist i koden ovenfor, har forfatterforfatteren blitt fjernet fra utviklerlisten før du velger tilfeldige utviklere for å se gjennom koden. For å velge tilfeldige utviklere fra listen, har du gjort bruk av random.choice
metode fra tilfeldig
modul.
Inne i schedule_review_request
metode, gjenta gjennom hver forpliktelse fra forpliktelseslisten. For hver forpliktelse, velg en tilfeldig utvikler enn forfatteren av forplikten for å sende ut forespørselen. Slik ser koden ut:
def schedule_review_request (commits): for commit commit: reviewer = select_reviewer (commit.Author, project_members)
Du valgte tilfeldige utviklere for å sende ut kodenevalueringsforespørselen. Før du sender forespørselsforespørselen, må du formatere den med opplysninger om forespørselen om anmeldelse. Definer en metode som kalles format_review_commit
som vil formatere kodeanmeldelsesforespørselen. Slik ser koden ut:
def_review_commit (commit): review_req = "" review_req + = "URL:" + prosjekt_url + '/ commit /' + commit.Id + "\ n" review_req + = "Commit:" + commit.Id + "\ n" review_req + = "Forfatter:" + commit.Author + "\ n" review_req + = "Date:" + commit.Date + "\ n" return review_req
I schedule_review_request
Metode, bygge opp e-postinnholdet for forespørselsforespørsel som blir sendt til anmelderen. E-postinnholdet vil inneholde den nødvendige informasjonen for korrekturleseren for å gjennomgå kodens forpliktelse. Endre schedule_review_request
som vist:
def plan_review_request (commits): date = time.strftime ("% Y-% m-% d") for commit commit: reviewer = select_reviewer (commit.Author, project_members) emne = dato + "Code Review [commit:" + commit.Id + "]" body = "Hei" "+ anmelder +" ', du har blitt valgt for å se koden for commit \ n "body + =" gjort av' "commit.author +" '. "body + =" \ n "body + = format_review_commit (commit) utskriftskroppen
Lagre endringene ovenfor og kjør Python scheduler-programmet.
python scheduler.py -n 25 -p "project_x"
Du bør kunne se en utgang som ligner på den som vist nedenfor:
Opprett en metode som kalles Send e-post
som vil sende forespørsel om forespørsel med det nødvendige emnet og innholdet. Du vil gjøre bruk av smtplib
modul for å sende ut e-postene. Importere smptlib
i scheduler.py
fil:
importere smtplib
Definer e-postserverens detaljer sammen med de offentlige variablene:
FROM_EMAIL = "[email protected]" FROM_PWD = "ditt passord" SERVER = "smtp.gmail.com" PORT = 587
Opprett en metode som kalles Send e-post
som sender ut eposten til den angitte adressen. Her er hvordan Send e-post
koden ville se ut:
def send_email (til, emne, kropp): header = "Fra:" + FROM_EMAIL + "\ n" header + = "Til:" + til + "\ n" header + = "Emne:" + emne + "\ n "header + = body print" ** Sende e-post til "" + til + "" mail_server = smtplib.SMTP (SERVER, PORT) mail_server.starttls () mail_server.login (FROM_EMAIL, FROM_PWD) mail_server.sendmail (FROM_EMAIL, til, header) mail_server.quit ()
Som vist i koden ovenfor skapte du smtp
server ved hjelp av gmail-serveren og portnummeret. Ved å bruke det definerte brukernavnet og passordet, loggte du på e-postkontoen og sendte e-posten til mottakeren.
Endre schedule_review_request
Metode for å sende e-posten i stedet for å skrive ut e-postinnholdet til terminalen.
def plan_review_request (commits): date = time.strftime ("% Y-% m-% d") for commit commit: reviewer = select_reviewer (commit.Author, project_members) emne = dato + "Code Review [commit:" + commit.Id + "]" body = "Hei" "+ anmelder +" ', du har blitt valgt for å se koden for commit \ n "body + =" gjort av' "commit.author +" '. "body + =" \ n "body + = format_review_commit (commit) send_email (anmelder, emne, kropp)
Lagre endringene ovenfor. Endre config.json
fil for å inkludere en gyldig e-postadresse som du kan sjekke. Kjør planleggeren ved å bruke følgende kommando:
python scheduler.py -n 30 -p "project_x"
Du bør kunne se følgende utgang på terminalen:
Bekreft e-postadressen for å se kodenevalueringsforespørselen sendt fra Kodeoversiktplanleggeren.
I denne delen av Python Code Review Scheduler-serien samler du inn commit-informasjonen i en liste. Forbindelseslisten ble videreisert for å formatere forespørselen om gjennomgang. Tilfeldige utviklere ble valgt for å sende ut kodenevalueringsforespørselen.
I neste del av denne serien ser du hvordan du følger opp forespørselen om kodeanmeldelse.
Kildekode fra denne opplæringen er tilgjengelig på GitHub.
.