WhosWhoPy

From A-Eskwiki
Revision as of 16:31, 3 June 2018 by Timb (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

WhosWhoPy is bedoeld als equivalent van WhosWho4, maar dan in Python. Het is oorspronkelijk gebouwd voor databasemigraties.

Aan de slag met Python

WhosWhoPy vereist een redelijk recente editie van Python 3 en pip. Als je manage build uitvoert, worden de rest van de benodigdheden geïnstalleerd in een virtuele omgeving. Het idee van deze virtuele omgeving is dat we hierin al onze dependencies installeren zonder dat dit systeembreed is of conflicten geeft met projecten met andere dependencies. Het volgende is dus belangrijk: voordat je een python-commando uitvoert, run source venv/bin/activate in de debugrootdir. (Alle pythoncommando's gaan ervan uit dat dit gebeurd is, en je in de debugrootdir zit.)

Architectuur

WhosWhoPy heeft als kern een hoop modelklassen (de (klein)kindklassen van Entiteit) die gegenereerd worden op basis van een klassediagram. Daarnaast hebben we wat hulpfuncties om de klassen op elkaar te laten werken, en een paar scripts die die hulpfuncties aanroepen. Specifiekere onderdelen worden hieronder toegelicht.

whoswhopy.config

Module om configuratiewaarden uit te lezen. Bij het importeren van deze module worden de configuratiewaarden ingelezen. Er zijn generieke functies geef en geef_verplicht voor stringvormige configuratiewaarden, en waardespecifieke functies zoals debug die waarden parsen en andere types geven (zoals hier een bool).

whoswhopy.database

Module om databaseverbinding te maken. Bij het importeren wordt deze verbinding gemaakt en in de variabele wsw4db (van type sqlalchemy.Session) gezet.

whoswhopy.gen

Bevat de gegenereerde code van dia2py, zie verderop.

Codestijl

We houden de canonieke stijl van PEP-8 aan, dus indentatie is 4 spaties en geen alignment alsjeblieft dankjewel.

Programmeertools

Voor codekwaliteit hebben we ook wat tools:

  • pytest en [hypothesis https://virtualenv.pypa.io/en/stable/]: een fijn unittestframework en volautomatische testcasegeneratie. Je kan pytest aanroepen in de debugrootdir om tests te runnen.
  • pylint om je te wijzen op code smells/lelijke codestijl (moet misschien nog een beetje getweakt worden).

Generated code

Zie ook: Dia en generated code.

Het script dia2py zet een gegeven klassediagram, in de vorm van een .dia-bestand, om in Pythonklassen. Je kan de resulterende klassen importeren als from whoswhopy.gen.Bla import Bla (of from whoswhopy.gen.Intro.Bla import Bla als de code in een package zit). Deze klassen zijn SQLAlchemy ORM-gebaseerde klassen, en je kan ermee werken zoals je van SQLAlchemy gewend bent.

Mocht je alle klassen willen gebruiken, dan kun je doen import whoswhopy.gen.alles as alles. Deze functionaliteit is bijvoorbeeld nodig om alle klassen aan de migratiegenerator door te geven.