I denne opplæringsserien vil du se hvordan du bygger en kodeoversiktplanlegger ved hjelp av Python. Gjennom hele denne serien vil du oppfordre noen grunnleggende begreper som å lese e-post, sende en e-post, utføre terminalkommandoer fra Python-programmet, behandle git logger, etc.
I første del starter du ved å sette opp de grunnleggende konfigurasjonsfilene, lese git-loggene og behandle dem for å sende kodenevalueringsforespørselen.
Start med å opprette en prosjektmappe som heter CodeReviewer
. Inne i CodeReviewer
mappe, opprett en fil som heter scheduler.py
.
Hvis du antar at kodeoversiktplanleggeren vil bli kjørt mot flere prosjekter, må du spesifisere prosjektnavnet som planleggeren skal kjøre og antall dager loggen må behandle. Så les først disse to parametrene som argumenter fra kodevurderingsprogrammet.
La oss gjøre bruk av argparse
Python-modul for å lese programparametrene. Importer biblioteket og legg til programargumentene. Du kan bruke ArgumentParser
metode av argparse
modul for å starte parseren. Når det er startet, kan du legge til argumentene til parseren. Her er koden for å lese argumentene fra programmet:
importere argparse parser = argparse.ArgumentParser (beskrivelse = "Code Review Scheduler Program") parser.add_argument ("- n", nargs = "?", type = int, standard = 1, help = "Antall (d) ays til se etter logg. ") parser.add_argument (" - p ", nargs ="? ", type = str, standard =" em ", help =" Prosjektnavn. ") args = parser.parse_args () no_days = args. n prosjekt = args.p print 'Behandler planleggeren mot prosjektet' + prosjekt + '...'
La oss opprettholde en separat config-fil som skal behandles av kodesøkeren. Opprett en fil som heter config.json
inne i prosjektkatalogen CodeReviewer
. I konfigurasjonsfilen vil det være informasjon om hvert prosjekt som skal behandles. Slik ser prosjektet konfigurasjonsfilen ut:
["navn": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "navn": "project_y", "git_url": "https://github.com / royagasthyan / project_y "]
Noen flere alternativer vil bli lagt til prosjektkonfigurasjonene i de senere delene.
La oss lese konfigurasjonen JSON
filen inn i Python-programmet. Importer JSON
modul og last inn JSON
data leses fra config filen.
# # Les planlegger config filen # med åpen ('config.json') som cfg_file: main_config = json.load (cfg_file)
Når korrekturleserskriptet kjøres, er prosjektnavnet spesifisert som en parameter. Basert på oppgitt prosjektnavn, kontroller om konfigurasjonene er tilgjengelige og klon lageret.
Først må du finne prosjektadressen fra konfigurasjonene. Iterere prosjektets data og finn prosjektadressen som vist:
for p i main_config: hvis p ['name'] == prosjekt: project_url = p ['git_url'] pause
Når du har prosjektadressen, sjekk om prosjektet allerede er klonet. Hvis ikke, klone prosjektadressen. Hvis det allerede eksisterer, naviger til eksisterende prosjektkatalog og hent de siste endringene.
# Klon depotet hvis det ikke allerede finnes utskrift "********* Gjøre prosjektkonto **********" hvis (os.path.isdir ("./" + prosjekt)): execute_cmd ("cd" + prosjekt + "; git pull") annet: execute_cmd ("git klone" + project_url + "" + prosjekt) print "*** Ferdig *******" print ""
For å utføre systemkommandoer, vil du gjøre bruk av Python os
modul. Opprett en metode for å utføre systemkommandoer siden du bruker det ofte. Her er execute_cmd
metode:
def execute_cmd (cmd): skriv ut "***** Utfør kommandoen" "+ cmd +" '"respons = os.popen (cmd) .read () returrespons
Etter å ha hentet bindingsloggen fra Git-depotet, analyserer du loggen. Opprett en ny Python-metode kalt process_commits
å behandle Git loggene.
def process_commits (): # kode ville være her
Git gir oss kommandoer for å få forpliktelsesloggen. For å få alle loggene fra et lager, ville kommandoen være:
git logg --all
Svaret ville være:
begå 04d11e21fb625215c5e672a93d955f4a176e16e4 Forfatter: royagasthyanDato: ons 8. februar 21:41:20 2017 +0530 Lag README.md
Du kan også få logger som er spesifikke for antall dager fra det tidspunktet kommandoen utføres. For å få logger siden n antall dager, ville kommandoen være:
git logg --all - siden = n.days
Du kan begrense det videre for å se om en bestemt forpliktelse var et tillegg, endring eller sletting. Utfør kommandoen ovenfor med --name-status
:
git logg --all - siden = 10.days - navn-status
Kommandoen ovenfor vil ha følgende utgang:
begå 04d11e21fb625215c5e672a93d955f4a176e16e4 Forfatter: royagasthyanDato: ons 8. februar 21:41:20 2017 +0530 Lag README.md A README.md
De EN
brev på venstre side av README.md
filen indikerer tillegg. på samme måte, M
vil indikere endring og D
vil indikere sletting.
Inne i process_commits
metode, la oss definere Git-kommandoen som skal utføres for å få loggloggen.
cmd = "cd" + prosjekt + "; git logg --all --since =" + str (no_days) + ".dag - navn-status"
Pass over kommandoen ovenfor cmd
til execute_cmd
metode.
svar = execute_cmd (cmd)
Les svaret, gjenta hver linje, og skriv ut det samme.
def process_commits (): cmd = "cd" + prosjekt + "; git logg --all --since =" + str (no_days) + ".dag - navn-status" respons = execute_cmd (cmd) for linje som svar .splitlines (): utskriftslinje
Ringe til process_commits
metode etter at konfigurasjonene er lest.
skriv ut 'Behandle planleggeren mot prosjektet' + prosjekt + '...' process_commits ()
Lagre endringene ovenfor, og prøv å utføre kodesøkeren ved å bruke følgende kommando:
python scheduler.py -n 10 -p "project_x"
Som du kan se, har vi startet kodevurderingen med antall dager og prosjektnavnet som skal behandles. Du bør kunne se følgende utgang:
********* Gjør prosjektkontoen ********** ***** Utfør kommandoen 'cd project_x; git pull '*** Ferdig ******* Behandler planleggeren mot prosjekt project_x ... ***** Utfør kommandoen' cd project_x; git logg --all - siden = 10.dag - navn-status 'commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Forfatter: royagasthyanDato: ons 8. februar 21:41:20 2017 +0530 Lag README.md A README.md
Så når du utfører kodesøkeren, kan du se at lagringsplassen er opprettet hvis den ikke allerede eksisterer, eller den er oppdatert. Etter det, basert på antall dager som er oppgitt, henter det pliktloggen til å behandle.
La oss nå analysere commit-loggen for å finne ut hva som gjelder forplikte-ID, forlovelsesdato og forplikte forfatter.
Som vist i loggene, begynner commit-ID-en med søkeordet begå
, forfatter starter med søkeordet Forfatter:
, og datoen starter med søkeordet Dato:
. Du bruker følgende søkeord for å identifisere commit-ID, forfatter og dato for en forpliktelse.
La oss prøve å få commit ID fra Git loggen linjene. Dette er ganske grei. Du trenger bare å sjekke om linjen starter med søkeordet begå
.
for linje i respons.splitlines (): hvis line.startswith ('commit'): utskriftslinje [7:]
Lagre endringene og kjør planleggeren, og du bør kunne få tilsendt ID.
Den neste oppgaven er å trekke ut forfatternavnet. For å sjekke om linjen inneholder forfatterinformasjonen, kontrollerer du først om linjen starter med Forfatter
søkeord. Hvis det gjør det, bruker du et vanlig uttrykk for å få brukeren.
Som du kan se, er brukerens e-postadresse inne i "mindre enn større enn" tegn. Vi bruker et vanlig uttrykk for å lese e-postadressen mellom < >
. Det vanlige uttrykket vil bli slik:
'\<(.*?)\>'
Importer Python re
modul for å bruke regulære uttrykk i Python.
import re
Sjekk nå om linjen starter med Forfatter
søkeord. Hvis det gjør det, trekk ut brukerens e-postadresse ved hjelp av det vanlige uttrykket ovenfor. Slik ser det ut:
hvis line.startswith ('Author:'): if (re.search ('\<(.*?)\>', linje)): print re.search (' \<(.*?)\>', Linje) .group (1)
For å trekke ut datoen fra loggen, må du sjekke om linjen starter med Dato
søkeord. Slik ser det ut:
hvis line.startswith ('Date:'): utskriftslinje [5:]
Her er finalen process_commits
metode:
def process_commits (): cmd = "cd" + prosjekt + "; git logg --all --since =" + str (no_days) + ".dag - navn-status" respons = execute_cmd (cmd) for linje som svar .splitlines (): hvis line.startswith ('commit'): utskriftslinje [7:] hvis line.startswith ('Author:'): hvis (re.search ('\<(.*?)\>', linje)): print re.search (' \<(.*?)\>', linje) .gruppe (1) hvis line.startswith (' Date: '): utskriftslinje [5:]
Lagre endringene ovenfor og start kodesøkeren.
python scheduler.py -n 10 -p "project_x"
Du bør ha hver forplikte detalj med commit Id, Author og commit date utskrift på terminalen.
I denne første delen av Python Code Review Scheduler så du hvordan du konfigurerer prosjektet. Du leser inngangsparametrene som kreves av planleggeren for å behandle prosjektet. I neste del av denne opplæringsserien samler vi innføringsdetaljer fra process_commits
metode og send forpliktelsen til tilfeldige utviklere for kodeanmeldelse.
Ikke nøl med å se hva vi har tilgjengelig for salg og for studier på Envato Market, og ikke nøl med å stille spørsmål og gi din verdifulle tilbakemelding ved hjelp av feedet under.
Jeg håper du likte den første delen. Gi oss beskjed om dine tanker eller forslag i kommentarene nedenfor.
Kildekode fra denne opplæringen er tilgjengelig på GitHub.