Testing og prodsetting av Cristin-utvidelsen cristin-mod-employment

Introduksjon

Formålet med dette notatet er å beskrive utrulling av utvidelser for å støtte Cristin-eksporten, samt testingforslag til (deler av) den nye funksjonaliteten.

I grove trekk består utvidelsene av følgende komponenter:

  • mod_employment.sql -- SQL-utvidelsen (1 tabell)

  • Cerebrum/modules/PersonEmployment.py -- Person-mixin for interaksjon med mod_employment.sql.

  • Den nødvendige utvidelsen av jobbene som populerer mod_employment.sql:

    • For UiA/HiØf - process_SAP_affiliations.py
    • For UiO - import_HR_person.py
  • Selve Cristin-eksporten -- contrib/no/generate-cristin-export.py.

DB-skjema

Vi trenger bare en tabell for å understøtte Cristin-eksporten. Opprinnelig var planen å bruke konstantobjektene for å merke stillingene (hovedsaklig den 4-siffrede stillingskoden samt beskrivelsen), men det vil koste for mye arbeid (herunder dobbeltarbeid) å administrere dette all den tid vi ikke har en autoritativ kilde for stillingskodene/beskrivelsene.

Det er også litt uheldig å la et slikt ikke-kontrollert felt være en del av primærnøkkelen (menneskebeskrivelsen er det), men det er ingen annen utvei, all den tid vi ikke har en institusjonsuavhengig kilde for stillingsbeskrivelsene.

Testing

Bare laste opp modulen:

$ python makedb.py design/mod_employment.sql

Det kreves ingen andre inngrep.

API-utvidelsen

Den opprinnelige tanken var å bruke tilknytninger som finnes alt og utvide litegrann tabellene. Det koster imidlertid mer enn hva gevinsten av å oppdatere hele core er, så vi valgte å bruke egen mixin til Person. I utgangspunktet er planen å lage det minste API-et vi trenger for å administrere tilsettingsoppføringer samt støtte søk som Cristin-eksporten vil trenge.

Man kan essensielt gjøre populering av person_employment på 2 måter: enten via et populate()-aktig grensesnitt (flere populate()-kall etterfulgt av write_db()) eller vha add/remove-<doohickey> (der de aktuelle kallene står selv ansvarlige for insert, update eller delete av de rette radene).

Testing

For kvikk klipp-og-lim:

import cerebrum_path, cereconf
from Cerebrum.Utils import Factory
db = Factory.get("Database")()
db.cl_init(change_program="testhack")
p = Factory.get("Person")(db)
ou = Factory.get("OU")(db)
co = Factory.get("Constants")()

Sjekke at Person-mixin er med:

print cereconf.CLASS_PERSON
import inspect
print inspect.getmro(p.__class__)

Deretter kan man leke litt med å legge til/slette oppføringer:

p.find(20905)
list(p.search_employment(person_id=p.entity_id))

La oss legge et par:

import cerebrum_path, cereconf
from Cerebrum.Utils import Factory
db = Factory.get("Database")()
p = Factory.get("Person")(db)
ou = Factory.get("OU")(db)
co = Factory.get("Constants")()
p.find(20905)
ou.find_stedkode(33, 15, 20, 185)
p.add_employment(ou.entity_id, "Overingeniør", co.system_sap,
                 100, "2007-12-01", "9999-12-31", "1087", True)
p.add_employment(ou.entity_id, "Overingeniør", co.system_sap,
                 99, "2007-12-01", "9999-12-31", "1087", True)

Den siste en en oppdatering av det foregående.

La oss fjerne også et par:

import cerebrum_path, cereconf
from Cerebrum.Utils import Factory
db = Factory.get("Database")()
p = Factory.get("Person")(db)
ou = Factory.get("OU")(db)
co = Factory.get("Constants")()
p.find(20905)
ou.find_stedkode(33, 15, 20, 185)
p.add_employment(ou.entity_id, "Overingeniør", co.system_sap,
                 100, "2007-12-01", "9999-12-31", "1087", True)
p.delete_employment(ou.entity_id, "Overingeniør", co.system_sap)

Prodsetting

Dette kan bli litt komplisert, siden UiA/HiØ henger etter på db- skjemaoppgraderingsfronten. Her er det litt viktig å ikke ødelegge andre jobber. F.eks. oppgraderingen av mod_sap.sql vil medføre at en del kode under contrib/no/hia/ vil måtte oppgraderes og at scheduled_jobs.py vil måtte rettes for de aktuelle jobbene.

  • mod_sap må oppgraderes til 1.1
  • mod_employment må rulles ut

For ordens skyld: HEAD virker ikke mot mod_sap.sql 1.0. Jeg anbefaler å pause job_runner.py mens man syssler med dette.

Oppgradere til HEAD

  • Cerebrum/modules/no/{hia,hiof}/
  • contrib/no/hia/<SAP-relaterte-jobber>
  • Cerebrum/modules/no/PersonEmployment.py
  • design/mod_employment.sql
  • design/mod_sap.sql
  • design/migrate
  • contrib/migrate_cerebrum_database.py

Tvinge mod_sap til 1.0

Mulig dette skrittet ikke er nødvendig, dersom migrate_cerebrum_database.py --info sier at sap-modulen er allerede i 1.0:

import cerebrum_path, cereconf
from Cerebrum.Utils import Factory
from Cerebrum import Metainfo
db = Factory.get("Database")()
db.cl_init(change_program='manual hack')
meta = Metainfo.Metainfo(db)
meta.set_metainfo("sqlmodule_sap", "1.0")
db.commit()

Oppgradere mod_sap til 1.1

Migrere skjema o.l.:

python contrib/migrate_cerebrum_database.py \
          --component sap --from sap_1_0 \
          --makedb-path $(pwd) \
          --design-path $(pwd)/design
python makedb.py --update-codes

Sjekk at:

python contrib/migrate_cerebrum_database.py --info

spytter ut fornuftige ting.

Laste opp mod_employment

Slik:

python makedb.py design/mod_employment.sql
python makedb.py --update-codes

Oppgradere core til 0.9.15

API-et er nemlig basert på at EntityContact har contact_alias-kolonnen (som vi trengte for 5-siffrede numrene til voip-utvidelsen). Hvis API-et bruker denne, må databasen også gjøre det. Jeg tester her ting mot HEAD, og da er det et krav. Dersom Entity.py er gammel nok, vil man antageligvis kunne glemme denne oppgraderingen:

python contrib/migrate_cerebrum_database.py \
       --from rel_0_9_13 --makedb-path $(pwd) \
       --design-path $(pwd)/design

Justering av cereconf

Siden vi nettopp har oppgradert masse filer, kan det være på sin plass å justere litt variablene i cereconf:

CLASS_PERSON = ("Cerebrum.modules.no.PersonEmployment/PersonEmploymentMixin",
                'Cerebrum.modules.Email/PersonEmailMixin',
                'Cerebrum.modules.no.Person/PersonFnrMixin',)
CLASS_OU=('Cerebrum.modules.no.Stedkode/Stedkode',)

Ymse importer for å teste at ting henger sammen

Siden man endret på mod_sap (og introduserte mod_employment), er det nettopp disse man skal teste virker. Alle importer anbefales å kjøres med dryrun først, for å unngå å herpe ting opp:

export FSDIR=/cerebrum/uia/dumps/FS/
export SAPDIR=/cerebrum/uia/dumps/SAP/
python contrib/no/hia/import_SAP_OU_id.py \
          --ou-file system_fs:$FSDIR/ou.xml \
          --dryrun \
          --logger-name console

Deretter burde man se masse SAP OU-ider (slik de står i stedkode_konv i ou.xml) i tabellen entity_external_id. Deretter tar vi personinfo:

python contrib/no/hia/import_SAP_person.py \
          --with-fok \
          -s $SAPDIR/feide_persondata.txt \
          --logger-name console \
          --dryrun 2>&1 | tee sap-person.log

Deretter kan vi populere tilknytninger OG person_employment i en jafs:

python contrib/no/hia/process_SAP_affiliations.py \
       -e $SAPDIR/feide_persti.txt \
       -p $SAPDIR/feide_persondata.txt \
       --with-employment \
       --with-fok \
       --logger-name console 2>&1 \
       --dryrun | tee sap-aff-emp.log

Sist, men ikke minst, selve Cristin-dumpen. Den prøver å være litt smart og foreslår ting man kan skrive når man ikke vet de rette verdiene. "-p" er perspective (for å finne ut av OU-hierarkiet), -s er kildesystem for tilsettingsdata (SAP for alle), "-r" er root-OU. root- OU sitt akronym bør ligne på institusjonen. Hvis man ikke aner hva root-OU-en skal være, skriv noe vås, så vil skriptet foreslå selv hvilke OU-er er forelderløse (aka potensielle root-OU-er) og sjekk at akronymet som vises er fornuftig. "-r" tar i mot enten sko eller ou_id. Heldig nok er 00-00-00 root-OU-en både for UiA og HiØ:

python contrib/no/generate-cristin-export.py \
       -o cristin.xml \
       -r 00-00-00 \
       -p FS \
       -s SAP \
       --logger-name console 2>&1 | tee cristin.log

Justering av scheduled_jobs

Alle jobbene som er nevnt her bør være justert. Jeg tror jeg fikset og committet alle, men det er sikkert lurt å kaste et blikk på resultatet.

Publisert 28. mai 2013 16:56