Created
July 31, 2023 07:26
-
-
Save LtGlahn/b5af771e7530caa135efc0425f3aaed1 to your computer and use it in GitHub Desktop.
Gjenoppretter objekter som er fjernet ved inkurie
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
from time import sleep | |
from datetime import datetime | |
from types import SimpleNamespace | |
import STARTHER | |
import nvdbapiv3 | |
import skrivnvdb | |
def lagSkrivemal( backupdata, nvdbId=None, oppdaterVersjon=None ): | |
""" | |
Lager skrivemal for gjen-registrering av historiske data | |
Versjon 1 av fagdata blir til ny registrering (operasjon="registrer"), | |
med startdato = objektversjonens startdato | |
Versjon 2 og høyere blir til oppdater av angitt nvdbId (som fås fra første endringssett) | |
""" | |
if backupdata['metadata']['versjon'] == 1: | |
operasjon = 'registrer' | |
endring = skrivnvdb.fagdata2skrivemal( backupdata, operasjon=operasjon ) | |
else: | |
assert isinstance(nvdbId, int), "nvdbId må være gyldig NVDB ID for oppdatering" | |
assert isinstance(oppdaterVersjon, int), "Versjonsnummer for objekt som skal oppdateres må være heltall" | |
operasjon='oppdater' | |
endring = skrivnvdb.fagdata2skrivemal( backupdata, operasjon=operasjon ) | |
endring[operasjon]['vegobjekter'][0]['nvdbId'] = nvdbId | |
endring[operasjon]['vegobjekter'][0]['versjon'] = oppdaterVersjon | |
# Endrer gyldighetsperiode: | |
endring[operasjon]['vegobjekter'][0]['gyldighetsperiode']['startdato'] = backupdata['metadata']['startdato'] | |
# Føyer på stedfesting | |
endring[operasjon]['vegobjekter'][0]["stedfesting"] = { | |
"punkt": [ { | |
"posisjon" : backupdata['lokasjon']['stedfestinger'][0]['relativPosisjon'], | |
"veglenkesekvensNvdbId" : backupdata['lokasjon']['stedfestinger'][0]['veglenkesekvensid'] | |
} ] } | |
# Legger på egenskapsverdi 11565 Tilleggsinformasjon (såfremt egenskapen ikke eksisterer) | |
if len( [ x for x in endring[operasjon]['vegobjekter'][0]['egenskaper'] if x['typeId'] == 11565 ] ) == 0: | |
endring[operasjon]['vegobjekter'][0]['egenskaper'].append( { "typeId": 11565, | |
"verdi": [ f"Erstatter objektid {backupdata['id']}, som ble fjernet ved inkurie juli 2023" ] } ) | |
return endring | |
def progressivVentetid( count ): | |
""" | |
Øker ventetida jo lengre tid det går, basert på antall forsøk. | |
""" | |
if count < 10: # Cirka 2.5 minutt totalt | |
return 15 | |
elif count < 30: # Litt over halvtimen (ca 33 minutt) | |
return 60 | |
else: | |
return 5*60 # Sjekker hvert 5. minutt | |
def skriveventing( endringssett ): | |
""" | |
Tar et endringssett hele veien fra registrering til det er utført NVDB databasen () | |
Avbryter med feilkode hvis noe går gærnt | |
""" | |
t0 = datetime.now( ) | |
endringssett.registrer() | |
assert endringssett.status == 'registrert', "Endringsett ikke registrert???" | |
t1 = datetime.now() | |
endringssett.startskriving() | |
sleep( 15 ) | |
endringssett.sjekkfremdrift( ) | |
count = 0 | |
while registrering.status == 'BEHANDLES' or registrering.status == 'VENTER': | |
sleep( progressivVentetid( count )) | |
print( f"Ventetid skriving: {datetime.now()-t1}") | |
count += 1 | |
endringssett.sjekkfremdrift() | |
assert 'UTFØRT' in endringssett.status, f"Noe gikk galt i skriveprosessen??? status={endringssett.status}" | |
print( f"Skriveprosess SUKSESS. tidsbruk={datetime.now()-t0}") | |
# return endringssett # Trenger ikke returnere noe, fordi vi endrer endringssett-objektet | |
if __name__ == '__main__': | |
forb = nvdbapiv3.apiforbindelse() | |
forb.velgmiljo( 'testles' ) | |
# mydata = { } | |
# for myId in [ 264392515, 264392516, 264392517, 264392518]: | |
# r = SimpleNamespace( ok = True ) | |
# versjon = 1 | |
# mydata[myId] = {} | |
# while r.ok: | |
# r = forb.les( '/vegobjekter/45/' + str( myId ) + '/' + str( versjon ), params={ 'inkluder' : 'alle' } ) | |
# if r.ok: | |
# mydata[myId][versjon] = r.json() | |
# versjon += 1 | |
# with open( 'gjenopprett.json', 'w') as f: | |
# json.dump( mydata, f, ensure_ascii=False, indent=4 ) | |
with open( 'gjenopprett.json') as f: | |
mydata = json.load( f ) | |
# Logger inn i NVDB api SKRIV | |
skriveforb = nvdbapiv3.apiforbindelse() | |
skriveforb.login( miljo='prodskriv' ) | |
skriveforb.klientinfo( 'Bomstasjon gjenoppretting') | |
# Lager endringssett og skriver til TESTPROD (først) | |
tempList = [] | |
for myId in [ '264392515', '264392516' , '264392517', '264392518' ]: | |
nyNvdbID = None | |
# NB! Forutsetter at versjonsnumrene er i rekkefølge! | |
for versjonsNummer in mydata[myId].keys(): | |
if versjonsNummer == '1': | |
skrivedata1 = lagSkrivemal( mydata[myId][versjonsNummer] ) | |
registrering = skrivnvdb.endringssett( skrivedata1 ) | |
registrering.forbindelse = skriveforb | |
skriveventing( registrering ) | |
skriveResultat = registrering.sjekkstatus( returjson=True ) | |
nyNvdbID = skriveResultat['resultat']['vegobjekter'][0]['nvdbId'] | |
else: | |
skrivedata2 = lagSkrivemal( mydata[myId][versjonsNummer], nvdbId=nyNvdbID, oppdaterVersjon=int( versjonsNummer )-1 ) | |
tempList.append( skrivedata2 ) | |
oppdatering = skrivnvdb.endringssett( skrivedata2 ) | |
oppdatering.forbindelse = skriveforb | |
skriveventing( oppdatering ) | |
# Siste operasjon: Lukker objektene den 1. juni | |
lukk_endringssett = skrivnvdb.fagdata2skrivemal( mydata[myId][versjonsNummer], operasjon='lukk' ) | |
lukk_endringssett['lukk']['vegobjekter'][0]['lukkedato'] = '2023-07-01' | |
lukk_endringssett['lukk']['vegobjekter'][0]['nvdbId'] = nyNvdbID | |
lukking = skrivnvdb.endringssett( lukk_endringssett ) | |
lukking.forbindelse = skriveforb | |
skriveventing( lukking ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment