Skip to content

Instantly share code, notes, and snippets.

@LtGlahn
Created July 31, 2023 07:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LtGlahn/b5af771e7530caa135efc0425f3aaed1 to your computer and use it in GitHub Desktop.
Save LtGlahn/b5af771e7530caa135efc0425f3aaed1 to your computer and use it in GitHub Desktop.
Gjenoppretter objekter som er fjernet ved inkurie
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