Bygg en Python Code Review Planlegger Sende gjennomgang forespørsler

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.

Starter

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.

Samler alle forpliktelser med detaljer

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)

Planlegger en kodeanmeldelsesforespørsel

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)

Formater forespørsel om kodeanmeldelse

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

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:

Sending av kodeanmeldelsesforespørselen

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.

Pakke det opp

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.

.