Ejemplo n.º 1
0
def prosessermappe(mappenavn, **kwargs):
    """
    Finner og prsoesserer alle json-filer (metadata vegbilder) i angitt mappenavn 

    Søker gjennom alle undermapper og støvsuger etter navn på json-filer som så sendes 
    til funksjonen prosesser( filnavn ) 

    ARGUMENTS: 
        mappenavn 

    KEYWORDS:
        Hva som helst - alle nøkkelord blir alle videresendt til funksjonen prosesser

    RETURNS:
        Nada 
    """

    logdir = 'loggdir'
    logname = 'loggnavn'
    duallog.duallogSetup(logdir=logdir, logname=logname)

    t0 = datetime.now()

    filer = finnfiltype(mappenavn, filetternavn='.json')

    logging.info('Prosessermappe- klar til å prosessere ' + str(len(filer)) +
                 ' metadata-filer under ' + mappenavn)
    antall_fiksa = 0
    for filnavn in filer:
        antall_fiksa += prosesser(filnavn, **kwargs)

    tidsbruk = datetime.now() - t0
    logging.info('Prosessermappe - fiksa ' + str(antall_fiksa) +
                 ' filer under ' + mappenavn + ' tidsbruk: ' +
                 str(round(tidsbruk.total_seconds())) + ' sekund')
Ejemplo n.º 2
0
def prosesser_fiksfilnavn(mappenavn, loggfilnavn=None, dryrun=False):
    """
    Finner og sjekker filnavn opp mot datainnhold for alle json-filer (metadata vegbilder) i angitt mappenavn 

    Søker gjennom alle undermapper og støvsuger etter navn på json-filer som så sendes 
    til funksjonen filks_sjekkfilnavn ( jsondata, filnavn  ) 

    ARGUMENTS: 
        mappenavn 

    KEYWORDS:
        loggfilnavn: None eller tekststreng. Hvis angitt logges filnavn på alle ikke-godkjente filer til dette filnavnet. 
        TODO: IKKE IMPLEMENTERT (ennå)

        dryrun: Boolsk, False (default) | True. Kjører analyseprosessen, men uten å gjøre reelle endringer i (meta)data på disk

    RETURNS:
    Nada 
    """
    logdir = 'loggdir'
    logname = 'loggnavn'
    duallog.duallogSetup(logdir=logdir, logname=logname)

    filer = finnfiltype(mappenavn, filetternavn='.json')
    logging.info('Klar til å sjekke/fikse filnavn for ' + str(len(filer)) +
                 ' filer under ' + mappenavn)
    antall_fiksa = 0
    for filnavn in filer:
        jsondata = lesjsonfil(filnavn)
        (jsondata, filnavn, modified) = fiks_sjekkfilnavn(jsondata,
                                                          filnavn,
                                                          dryrun=dryrun)
        if modified:
            antall_fiksa += 1
            if not dryrun:
                skrivjsonfil(filnavn, jsondata)

    oppdatert = 'Fant og fiksa filnavnfeil i '
    if dryrun:
        oppdatert = 'Fant, men fiksa IKKE filnavnfeil i '

    if antall_fiksa > 0:
        logging.info(oppdatert + str(antall_fiksa) + ' vegbilder i mappe ' +
                     mappenavn)
    else:
        logging.info('Fant ingen filnavnfeil i ' + mappenavn)
Ejemplo n.º 3
0
        fname = os.path.join(mappenavn, 'dummy.txt')
        nymappe = Path(mappenavn)
        nymappe.mkdir(parents=True, exist_ok=True)
        logging.info(fname)

        with open(fname, 'w') as f:
            f.write('Hahahaha')


if __name__ == "__main__":

    versjonsinfo = "Test tegnsett mappenavn versjon 1.2, 19.06.2019 kl 14:49"
    logdir = 'loggfiler_testmappenavn'
    logname = 'testmappenavn_'
    duallog.duallogSetup(logdir=logdir, logname=logname)

    logging.info(versjonsinfo)

    if len(sys.argv) < 2:
        print("BRUK:\n")
        print('testmappenavn.exe oppsettfil_flyttvegbilder.json\n')
        time.sleep(1.5)

    else:

        if '.json' in sys.argv[1][-5:].lower():
            print('flyttvegbilder.exe: Leser oppsettfil fra', sys.argv[1])
            with open(sys.argv[1]) as f:
                oppsett = json.load(f)
Ejemplo n.º 4
0
def prosesser(filnavn, dryrun=False):
    """
    Retter opp datafeil og mangler i vegbilde-json

    OVerskriver gammal json-fil hvis nødvendig (dvs kun hvis det er gjort endringer)

    ARGUMENTS
        filnavn - fil- og mappenavn til json-fil med metadata for vegbildet

    KEYWORDS 
        dryrund = False Sett til True for å få detaljert utlisting av alle 
                  endringer som normalt ville blitt gjort (men uten at 
                  endringene faktisk gjennomføres. )


    RETURNS
        Antall filer som er endra- 0 eller 1.  
        
    TODO: 
        Sjekk at vi har veglenkeID og posisjon, hent dem hvis nødvendig. Gjenbruk i så fall data til å fikse exif_roadident og 
        senterlinjeposisjon 
    """

    logdir = 'loggdir'
    logname = 'loggnavn'
    duallog.duallogSetup(logdir=logdir, logname=logname)

    fiksa = 0
    fiksa_filnavn = 0
    skrevet = 0
    jsondata = lesjsonfil(filnavn, ventetid=1)

    # Fikser ting
    (jsondata, tmp) = fiks_vegtilknytning(jsondata, filnavn, dryrun=dryrun)
    fiksa += tmp
    (jsondata, tmp) = fiks_senterlinjeposisjon(jsondata,
                                               filnavn,
                                               dryrun=dryrun)
    fiksa += tmp
    (jsondata, tmp) = fiks_exif_roadident(jsondata, filnavn, dryrun=dryrun)
    fiksa += tmp
    # (jsondata, filnavn, tmp) = fiks_sjekkfilnavn( jsondata, filnavn, dryrun=dryrun)
    # fiksa_filnavn += tmp

    if dryrun:
        if fiksa > 0:
            logging.info('Dryrun-prosessering: behov for oppdatering av ' +
                         filnavn)
        else:
            logging.info('Dryrun-prosessering: Ingen feil funnet i ' + filnavn)

    elif fiksa > 0:
        if sjekkegenskapverdi(jsondata, 'exif_kvalitet', 'int') and int(
                jsondata['exif_kvalitet']) in [0, 1, 2]:
            jsondata['exif_kvalitet'] = int(jsondata['exif_kvalitet']) + 0.5
        elif sjekkegenskapverdi(jsondata, 'exif_kvalitet', 'float'):
            logging.warning(
                "Pussig kvalitetsverdi - er fila prosessert før? exif_kvalitet="
                + jsondata['exif_kvalitet'] + ' ' + filnavn)

        skrivjsonfil(filnavn, jsondata)
        logging.info('Prosessering - retta mangler: ' + jsondata['bildeid'] +
                     ' ' + filnavn)
        skrevet = 1

    try:
        kvalitetskontroll(jsondata, filnavn)
    except AssertionError as myErr:
        logging.error(str(myErr))

    if fiksa_filnavn > 0:
        logging.warning("Endret feil filnavn på " + str(fiksa_filnavn) +
                        " vegbilder (.jpg, .json, .webp)")

    return skrevet
Ejemplo n.º 5
0
def testing(testdata='testdata',
            tempdir='testdata_temp',
            logdir='test_loggdir',
            logname='test_loggnavn',
            huggMappeTre=3):
    """
    Kjører gjennom testdata

    Kopierer mappen med testdata til en midlertidig katalog (som overskrives, hvis den finnes fra før). 
    Anvender deretter alle kvalitetssikrings / kvalitetsheving-rutiner på testdata. 
    """

    duallog.duallogSetup(logdir=logdir, logname=logname)
    testfiler = finnfiltype(testdata, filetternavn='.json')

    fremhev = ' ====> '
    logging.info(' ')
    logging.info(fremhev + 'Forbereder test')
    logging.info(' ')
    logging.info(fremhev + 'Kopierer testdata-mappe fra ' + testdata + ' => ' +
                 tempdir)

    copy_tree(testdata, tempdir)

    logging.info(' ')
    logging.info(fremhev + 'Kvalitetskontroll, ikke prosesserte filer i ' +
                 tempdir)
    logging.info('       Her kommer det masse WARNING-meldinger...\n')

    kopiertefiler = finnfiltype(tempdir, '.json')
    for filnavn in kopiertefiler:
        jsondata = lesjsonfil(filnavn, ventetid=1)

        try:
            kvalitetskontroll(jsondata, filnavn)
        except AssertionError as myErr:
            logging.warning(str(myErr))

    logging.info(' ')
    logging.info(fremhev + 'Prosesserer flat filstruktur-mappe ' + tempdir +
                 '/allefiler_flatt\n')

    prosessermappe(tempdir + '/allefiler_flatt')

    logging.info(' ')
    logging.info(fremhev + 'Finner undermapper til ' + tempdir +
                 str(huggMappeTre) +
                 ' nivåeer ned, prosesserer hver enkelt undermappe\n')

    finnundermapper(tempdir, huggMappeTre=huggMappeTre)

    logging.info(' ')
    logging.info(fremhev + 'Sluttkontroll prosesserte data i ' + tempdir +
                 '...\n')

    for filnavn in kopiertefiler:
        jsondata = lesjsonfil(filnavn, ventetid=1)

        try:
            kvalitetskontroll(jsondata, filnavn)
        except AssertionError as myErr:
            logging.warning(str(myErr))
Ejemplo n.º 6
0
def finnundermapper(mappenavn,
                    typeprosess='posisjon',
                    huggMappeTre=None,
                    firstIterasjon=True,
                    **kwargs):
    """
    Deler et (potensielt kjempedigert) mappetre i mindre underkataloger. 

    Hensikten er å unngå å prøve å finne millionvis av json-filer i en katalog. I stedet
    finner vi alle underkataloger (og evt underkataloger til dem igjen), inntil et nærmere angitt 
    nivå relativt under rot-mappa. 

    Parameteren huggMappeTre angir hvor mange nivåer av underkataloger vi skal dele opp med. 

    ARGUMENTS: 
        mappenavn - navn på katalogen vi skal støvsuge for metadata-filer (json)
    
    KEYWORDS: 
        huggMappeTre: None, 0 eller antall nivåer vi skal gå nedover 
                     før vi sender under(under)katalogen til prosessermappe( underkatalog)

        typeprosess: tekststreng, 'posisjon' | 'filnavn' | 'alle'. Hva slags type prosess som skal kjøres
                      på metadata. Aktuelle verdier: 
                      'posisjon' (default): Fikser opp i vegtilknytning, finner posisjon etc. 
                      'filnavn'  Sjekker filnavn, logger filnavn-feil og evt retter opp filnavnet i metadata. 

        firstiteration: Holder styr på om vi er første nivå i iterasjonen. Ikke tukle med denne! 
    
    RETURNS: 
        Nada 
    """
    logdir = 'loggdir'
    logname = 'loggnavn'
    duallog.duallogSetup(logdir=logdir, logname=logname)

    t0 = datetime.now()

    if huggMappeTre:

        logging.info("finner undermapper til: " + mappenavn)
        huggMappeTre = huggMappeTre - 1

        folders = [f for f in glob.glob(mappenavn + "/*/")]
        for undermappe in folders:
            logging.info("fant undermappe: " + undermappe)
            finnundermapper(undermappe,
                            huggMappeTre=huggMappeTre,
                            firstIterasjon=False,
                            **kwargs)

    else:
        logging.info("Starter proseessering av undermappe: " + mappenavn)

        if typeprosess.lower() in ['posisjon', 'alle']:
            prosessermappe(mappenavn, **kwargs)

        if typeprosess.lower() in ['filnavn', 'alle']:
            prosesser_fiksfilnavn(mappenavn, **kwargs)

    if firstIterasjon:
        tidsbruk = datetime.now() - t0
        logging.info("Ferdig med å gå gjennom alle undermapper til " +
                     mappenavn + ", tidsbruk " +
                     str(round(tidsbruk.total_seconds())) + ' sekund')
Ejemplo n.º 7
0
import logging 

from formatsjekk import kvalitetskontroll, finnfiltype, filnavndata
from flyttvegbilder_v54 import lesjsonfil
import duallog

duallog.duallogSetup( logdir='loggdir', logname='loggfil')

filer = finnfiltype( 'testdata/allefiler_flatt', '.json' )

for filnavn in filer:
    jsondata = lesjsonfil( filnavn)
    try:
        kvalitetskontroll( jsondata, filnavn)
    except AssertionError as myErr:
        logging.warning( myErr)


# sjekker funksjonen filnavndata 
filnavn = 'Fy06_Ev134_hp04_f1_m00031'
filnavnsvar = { 'fylke': 6,
                'vegkat': 'E',
                'vegstat': 'v',
                'vegnr': 134,
                'hp': 4,
                'felt': 1,
                'meter': 31}
try: 
    assert filnavndata( filnavn) == filnavnsvar, 'funksjon filnavndata gir feil svar' 
    assert filnavndata( filnavn + '.json') == filnavnsvar, 'funksjon filnavndata gir feil svar ved filetternavn .json' 
    assert filnavndata( filnavn + '.jpg') == filnavnsvar, 'funksjon filnavndata gir feil svar ved filetternavn .jpg'