I den tredje delen av denne serien så du hvordan du lagrer kodenevalueringsforespørselsinformasjonen for oppfølging. Du opprettet en metode som heter read_email
for å hente e-postene fra innboksen for å sjekke om en anmelder har svart på forespørselen om kodeanmeldelse. Du har også implementert feilhåndtering i kodeoversiktplanleggerkoden.
I denne delen av serien bruker du den lagrede kodevurderingsinformasjonen og informasjonen fra e-postene for å sjekke om anmelderen har svart på forespørselen om anmeldelse. Hvis en forespørsel ikke er besvart, sender du en oppfølgings-e-post til anmelderen.
Start med å klone kildekoden fra tredje del av opplæringsserien.
git klone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Endre config.json
fil for å inkludere noen relevante e-postadresser, holde [email protected]
epostadresse. Det er fordi git har forpliktet seg i forbindelse med denne bestemte e-postadressen som kreves for at koden skal utføres som forventet. Endre SMTP
legitimasjon i schedule.py
fil:
FROM_EMAIL = "[email protected]" FROM_PWD = "your_password"
Naviger til prosjektkatalogen CodeReviewer
og prøv å utføre følgende kommando i terminalen.
python scheduler.py -n 20 -p "project_x"
Det skal sende koden gjennomgang forespørsel til tilfeldige utviklere for gjennomgang og lage en reviewer.json
fil med gjennomgangsinformasjon.
La oss starte med å lage en oppfølgingsforespørselsmetode som heter followup_request
. Inne i followup_request
metode, les reviewer.json
fil og hold innholdet i en liste. Slik ser koden ut:
med åpen ('reviewer.json', 'r') som følger: review_info = json.load (jfile)
Deretter trekker du inn e-postinformasjonen ved hjelp av read_email
metode som du implementerte i den siste opplæringen.
email_info = read_email (no_days)
Hvis korrekturleseren har svart på forespørselen om anmeldelse, bør det være en e-post med samme emne og a Re:
tag prefixed til den. Så iterate gjennom revisjonsinformasjonslisten og sammenlign gjenstanden med e-postfeltet for å se om anmelderen har svart på forespørselen.
for gjennomgang i review_info: review_replied = false expected_subject = 'RE:' + anmeldelse ['subject'] for e-post i email_info: hvis expected_subject == email ['subject']: review_replied = True print 'Reviewer har svart'
Som vist i den ovennevnte koden, har du iterert gjennom review_info
liste og sjekket gjenopplysningsfaget mot e-postpersonalet for å se om anmelderen har svart.
Nå, når korrekturleseren har svart på forespørselen om kodeanmeldelse, trenger du ikke å beholde bestemt gjennomgangsinformasjon i reviewer.json
fil. Så opprett en Python-metode kalt Delete_Info
for å fjerne den bestemte gjennomgangsinformasjonen fra reviewer.json
fil. Her er hvordan Delete_Info
utseende:
def Delete_Info (info, id): for jeg i xrange (len (info)): hvis info [i] ['id'] == id: info.pop
Som vist i den ovennevnte koden, har du iterert gjennom gjennomgangslisten og slettet oppføringen som samsvarer med ID. Etter å ha fjernet informasjonen fra filen, returner listen.
Du må ringe Delete_Info
metode når et bestemt stykke gjennomgangsinformasjon besvares. Når du ringer til Delete_Info
metode, må du passere en kopi av review_info
slik at den opprinnelige informasjonslisten ikke endres. Du trenger den opprinnelige revisjonsinformasjonslisten for sammenligning senere. Så importere kopiere
Python-modul for å lage en kopi av den opprinnelige revisjonsinformasjonslisten.
fra kopi import kopi
Lag en kopi av review_info
liste.
review_info_copy = copy (review_info)
Når du sletter gjennomgangsinformasjonen som har blitt besvart fra den opprinnelige listen, sender du kopieringslisten til Delete_Info
metode.
review_info_copy = Delete_Info (review_info_copy, review ['id'])
Her er followup_request
metode:
def followup_request (): med åpen ('reviewer.json', 'r') som referile: review_info = json.load (jfile) review_info_copy = copy (review_info) email_info = read_email (no_days) for gjennomgang i review_info: review_replied = False expected_subject = 'Re:' + anmeldelse ['subject'] for email i email_info: if expected_subject == email ['Subject']: review_replied = Sann review_info_copy = Delete_Info (review_info_copy, review ['id']) break;
Nå, når review_info
listen har blitt iterated, du må sjekke om det er noen endringer i reviewer.json
fil. Hvis eksisterende gjennomgangsinformasjon er fjernet, må du oppdatere reviewer.json
filen riktig. Så sjekk om review_info_copy
og review_info
er de samme, og oppdaterer reviewer.json
fil.
hvis review_info_copy! = review_info: med åpen ('reviewer.json', 'w') som outfile: json.dump (review_info_copy, outfile)
Her er komplett followup_request
metode:
def followup_request (): med åpen ('reviewer.json', 'r') som referile: review_info = json.load (jfile) review_info_copy = copy (review_info) email_info = read_email (no_days) for gjennomgang i review_info: review_replied = False expected_subject = 'Re:' + anmeldelse ['subject'] for email i email_info: if expected_subject == email ['Subject']: review_replied = Sann review_info_copy = Delete_Info (review_info_copy, review ['id']) break; hvis review_info_copy! = review_info: med åpen ('reviewer.json', 'w') som outfile: json.dump (review_info_copy, outfile)
Ringe til followup_request
metode for å følge opp forespørsler om gjennomgang som allerede er sendt.
Prøv: commits = process_commits () # Lagt til oppfølgingsmetoden followup_request () hvis len (forplikter) == 0: print 'No commits found' annet: schedule_review_request (commits) unntatt Unntak, e: print 'Feil oppstod. Sjekk logg for detaljer. ' logger.error (str (datetime.datetime.now ()) + "- Feil oppstod:" + str (e) + "\ n") logger.exception (str e))
Lagre endringene ovenfor. For å teste oppfølgingsfunksjonaliteten, slett du reviewer.json
fil fra prosjektkatalogen. Kjør nå planleggeren slik at forespørsler om kodeanmeldelse sendes til tilfeldige utviklere. Sjekk om denne informasjonen er lagret i reviewer.json
fil.
Be den bestemte utvikleren å svare på kodesøknadsforespørselen ved å svare på e-posten. Kjør nå planleggeren igjen, og denne gangen bør planleggerprogrammet finne svaret og fjerne det fra reviewer.json
fil.
Når korrekturleseren har svart på forespørselen om kodeanmeldelsesforespørsel, må denne informasjonen fjernes fra reviewer.json
fil siden du ikke trenger å spore den videre. Hvis anmelderen ennå ikke har svart på forespørselen om kodeanmeldelse, må du sende en oppfølgingsmelding for å minne ham eller henne om anmelderforespørselen.
Kodeanmeldelsesplanleggeren ville løpe på daglig basis. Når det kjøres, må du først sjekke om det har vært en viss tid siden utvikleren har svart på forespørselen om anmeldelse. I prosjektkonfigurasjonen kan du angi en gjennomgangstid hvor, hvis anmelderen ikke har svart, ville planleggeren sende en påminnelses-epost.
La oss starte med å legge til en konfigurasjon i prosjektet config. Legg til en ny config kalt followup_frequency
i config-filen.
"navn": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "followup_frequency": 2, "medlemmer": ["[email protected]", "samon @ gmail .com "," [email protected] "," [email protected] "]
Så når anmelderen ikke har svart på followup_frequency
Antall dager, du sender en påminnelses-e-post. Les konfigurasjonen i en global variabel mens du leser konfigurasjonene:
for p i main_config: hvis p ['navn'] == prosjekt: project_url = p ['git_url'] project_members = p ['members'] followup_frequency = p ['followup_frequency'] pause
Inne i followup_request
Metode, send en påminnelses-e-post når anmelderen ikke har svart på oppfølgingsforespørsmålene for followup_frequency
antall dager. Beregn antall dager siden anmeldelsen ble sendt.
review_date = datetime.datetime.strptime (anmeldelse ['sendDate'], '% Y-% m-% d') i dag = datetime.datetime.today () days_since_review = (i dag - review_date) .days
Hvis antall dager er større enn oppfølgingsfrekvensdatoen i konfigurasjonene, send påminnelsesmeldingen.
hvis ikke review_replied: hvis days_since_review> followup_frequency: send_email (anmeldelse ['reviewer'], 'Påminnelse:' + anmeldelse ['emne'], '\ nDu har ikke svart på anmelderforespørselen \ n')
Her er komplett followup_request
metode:
def followup_request (): med åpen ('reviewer.json', 'r') som referile: review_info = json.load (jfile) review_info_copy = copy (review_info) email_info = read_email (no_days) for gjennomgang i review_info: review_date = datetime. datetime.strptime (review ['sendDate'], '% Y-% m-% d') i dag = datetime.datetime.today () days_since_review = (i dag - review_date) .days review_replied = False expected_subject = 'Re:' + anmeldelse ['emne'] for e-post i email_info: if expected_subject == email ['Subject']: review_replied = Sann review_info_copy = Delete_Info (review_info_copy, review ['id']) break; hvis ikke review_replied: hvis days_since_review> followup_frequency: send_email (anmeldelse ['reviewer'], 'Påminnelse:' + anmeldelse ['emne'], '\ nDu har ikke svart på anmeldelseforespørselen \ n') hvis review_info_copy! = review_info: med åpen ('reviewer.json', 'w') som outfile: json.dump (review_info_copy, outfile)
I denne veiledningen så du hvordan du implementerer logikken for å følge opp forespørsler om kodeanmeldelse. Du har også lagt til funksjonaliteten for å sende en påminnelses-e-post hvis anmelderen ikke har svart på eposten i et bestemt antall dager.
Denne Python-kode anmelder kan forbedres ytterligere for å dekke dine behov. Gjør gaffelbeholderen og legg til nye funksjoner, og gi oss beskjed i kommentarene nedenfor.
Kildekode fra denne opplæringen er tilgjengelig på GitHub.