Example #1
0
def importAkvoRegistration(api,akvo,projectlocatie,user,days):
    meetpunten=set()
    waarnemingen=set()
    surveyId = akvo.regform
    if not surveyId:
        logger.warning('No registration form for akvo configuration {}'.format(akvo))
        return meetpunten, waarnemingen 
    num_meetpunten = 0
    beginDate=as_timestamp(akvo.last_update + datetime.timedelta(days=-days)) if days else None
    instances = api.get_registration_instances(surveyId,beginDate=beginDate).items()
    for key,instance in instances:
        identifier=instance['surveyedLocaleIdentifier']
        displayName = instance['surveyedLocaleDisplayName']
        submitter = instance['submitterName']
        device = instance['deviceIdentifier']
        date=instance['collectionDate']
        date=datetime.datetime.utcfromtimestamp(date/1000.0).replace(tzinfo=pytz.utc)
        answers = api.get_answers(instance['keyId'])
        akvowaarnemer = api.get_answer(answers,questionText='Waarnemer')
        meetid = api.get_answer(answers,questionText='Meetpunt ID')
        foto = api.get_answer(answers,questionText='Maak een foto van het meetgebied')
        geoloc = api.get_answer(answers,questionText='Geolocatie')
        omschrijving = api.get_answer(answers,questionText='Meetpunt omschrijving')
        num_meetpunten += 1
        try:
            lat,lon,elev,code = geoloc.split('|')
            #location = Point(float(lon),float(lat),float(elev),srid=4326)
            location = Point(float(lon),float(lat),srid=4326)
            location.transform(28992)
        except:
            logger.error('Probleem met coordinaten {loc}. waarnemer = {waar}, meetpunt = {mp}'.format(loc=geoloc, waar = akvowaarnemer or submitter, mp=meetid))
            continue

        akvoname = akvowaarnemer or submitter
        waarnemer = get_or_create_waarnemer(akvoname)

        # change reference to photo from smartphone storage to amazon storage and download to this server
        if foto:
            foto = download_photo(os.path.join(akvo.storage,os.path.basename(foto)))

        if meetid:
            # Gebuik waarnemer naam + meetid
            meetName = '{name} - {id}'. format(name=akvoname, id=meetid)
        else:
            meetName = displayName
        name = meetName
        meetpunt = None
        for dup in range(10):
            try:
                meetpunt, created = waarnemer.meetpunt_set.get_or_create(identifier=identifier, defaults={
                    'name': name, 
                    'projectlocatie': projectlocatie, 
                    'location': location, 
                    'displayname': displayName, 
                    'device': device,
                    'photo_url': foto,
                    'description': omschrijving})
                break
            except Exception as e:
                logger.error('Dubbel meetpunt {mname} voor waarnemer {wname}. Error={error}'.format(mname=name, wname=unicode(waarnemer), error=e))
                name = '{} ({})'.format(meetName, dup+1) 
                continue
        if not meetpunt:
            raise Exception('Te veel dubbele meetpunten met naam {name}'.format(name=meetName))

        if created:
            logger.info('Meetpunt {id} aangemaakt voor waarnemer {name}'.format(id=meetName,name=unicode(waarnemer)))
            meetpunten.add(meetpunt)

        #if device != 'IMPORTER':
        ec = api.get_answer(answers,questionText='Meet EC waarde - ECOND') 
        diep = api.get_answer(answers,questionText='Diep of ondiep gemeten?')
        waarneming_naam = maak_naam('EC',diep)

        try:
            waarneming, created = meetpunt.waarneming_set.get_or_create(naam=waarneming_naam, waarnemer=waarnemer, datum=date, 
                                              defaults = {'waarde': ec, 'device': device, 'opmerking': '', 'foto_url': foto, 'eenheid': 'uS/cm'})
        except Exception as e:
            logger.exception('Probleem bij toevoegen waarneming {wname} aan meetpunt {mname}'.format(wname=waarneming_naam, mname=unicode(meetpunt)))
            continue

        if created:
            logger.debug('{id}, {date}, EC={ec}'.format(id=waarneming.naam, date=waarneming.datum, ec=waarneming.waarde))
            waarnemingen.add(waarneming)
            meetpunten.add(meetpunt)

        else:#if waarneming.waarde != ec:
            waarneming.waarde = ec
            waarneming.save()
            waarnemingen.add(waarneming)
            meetpunten.add(meetpunt)
        #endif
        
    logger.info('Aantal meetpunten: {aantal}, nieuwe meetpunten: {new}'.format(aantal=num_meetpunten, new=len(meetpunten)))

    return meetpunten, waarnemingen
Example #2
0
def importAkvoRegistration(api,akvo,projectlocatie,user,days):
    surveyId = akvo.regform
    meetpunten=set()
    waarnemingen=set()
    num_meetpunten = 0
    beginDate=as_timestamp(akvo.last_update + datetime.timedelta(days=-days)) if days else None
    instances = api.get_registration_instances(surveyId,beginDate=beginDate).items()
#    instances = api.get_registration_instances(surveyId).items()
    for key,instance in instances:
        identifier=instance['surveyedLocaleIdentifier']
        displayName = instance['surveyedLocaleDisplayName']
        submitter = instance['submitterName']
        device = instance['deviceIdentifier']
        date=instance['collectionDate']
        date=datetime.datetime.utcfromtimestamp(date/1000.0).replace(tzinfo=pytz.utc)
        answers = api.get_answers(instance['keyId'])
        akvowaarnemer = api.get_answer(answers,questionText='Waarnemer')
        meetid = api.get_answer(answers,questionText='Meetpunt ID')
        foto = api.get_answer(answers,questionText='Maak een foto van het meetgebied')
        geoloc = api.get_answer(answers,questionText='Geolocatie')
        omschrijving = api.get_answer(answers,questionText='Meetpunt omschrijving')
        num_meetpunten += 1
        try:
            lat,lon,elev,code = geoloc.split('|')
            location = Point(float(lon),float(lat),srid=4326)
            location.transform(28992)
        except:
            logger.error('Probleem met coordinaten {loc}. waarnemer = {waar}, meetpunt = {mp}'.format(loc=geoloc, waar = akvowaarnemer or submitter, mp=meetid))
            continue

        akvoname = akvowaarnemer or submitter
        waarnemer = get_or_create_waarnemer(akvoname)

        # change reference to photo from smartphone storage to amazon storage and download to this server
        if foto:
            foto = download_photo(os.path.join(akvo.storage,os.path.basename(foto)))

        if meetid:
            # Gebuik waarnemer naam + meetid
            meetName = '{name} - {id}'. format(name=akvoname, id=meetid)
        else:
            meetName = displayName
        try:
            meetpunt, created = waarnemer.meetpunt_set.get_or_create(identifier=identifier, defaults={
                'name': meetName, 
                'projectlocatie': projectlocatie, 
                'location': location, 
                'displayname': displayName, 
                'device': device,
                'photo_url': foto,
                'description': omschrijving})
        except Exception as e:
            # acacia.data.models.meetlocatie probably exists
            try:
                meetpunt = Meetpunt.objects.get(name=meetName, projectlocatie=projectlocatie)
                meetpunt.identifier = identifier
                meetpunt.displayname = displayName
                meetpunt.device = device
                meetpunt.identifier = identifier
                meetpunt.photo_url = foto
                meetpunt.save()
                meetpunten.add(meetpunt)
                created = True
            except:
                logger.exception('Probleem bij toevoegen meetpunt {mname} aan waarnemer {wname}'.format(mname=meetName, wname=unicode(waarnemer)))
                continue

        if created:
            logger.info('Meetpunt {id} aangemaakt voor waarnemer {name}'.format(id=meetName,name=unicode(waarnemer)))
            meetpunten.add(meetpunt)

        if device != 'IMPORTER':
            ec = api.get_answer(answers,questionText='Meet EC waarde - ECOND') 
            diep = api.get_answer(answers,questionText='Diep of ondiep gemeten?')
            waarneming_naam = maak_naam('EC',diep)
    
            try:
                waarneming, created = meetpunt.waarneming_set.get_or_create(naam=waarneming_naam, waarnemer=waarnemer, datum=date, 
                                                  defaults = {'waarde': ec, 'device': device, 'opmerking': '', 'foto_url': foto, 'eenheid': 'uS/cm'})
            except Exception as e:
                logger.exception('Probleem bij toevoegen waarneming {wname} aan meetpunt {mname}'.format(wname=waarneming_naam, mname=unicode(meetpunt)))
                continue
    
            if created:
                logger.debug('{id}, {date}, EC={ec}'.format(id=waarneming.naam, date=waarneming.datum, ec=waarneming.waarde))
                waarnemingen.add(waarneming)
                meetpunten.add(meetpunt)
    
            else:#if waarneming.waarde != ec:
                waarneming.waarde = ec
                waarneming.save()
                waarnemingen.add(waarneming)
                meetpunten.add(meetpunt)
        
    logger.info('Aantal meetpunten: {aantal}, nieuwe meetpunten: {new}'.format(aantal=num_meetpunten, new=len(meetpunten)))

    return meetpunten, waarnemingen
Example #3
0
def importAkvoMonitoring(api,akvo,days):
    meetpunten = set()
    waarnemingen = set()
    num_waarnemingen = 0
    num_replaced = 0

    beginDate=as_timestamp(akvo.last_update + datetime.timedelta(days=-days)) if days else None
    for surveyId in [f.strip() for f in akvo.monforms.split(',')]:
        survey = api.get_survey(surveyId)
        try:
            instances,meta = api.get_survey_instances(surveyId=surveyId,beginDate=beginDate)
        except Exception as e:
            logger.exception('Monitoringsurvey {}: {}'.format(survey,e))
            continue
        while instances:
            for instance in instances:
                submitter = instance['submitterName']
                waarnemer = get_or_create_waarnemer(submitter)
                
                #find related registration form (meetpunt)
                localeId = instance['surveyedLocaleIdentifier']
                try:
                    meetpunt = Meetpunt.objects.get(identifier=localeId)
                except Meetpunt.DoesNotExist:
                    logger.error('Meetpunt {locale} niet gevonden voor {submitter}'.format(locale=localeId, submitter=submitter))
                    continue
                
                device = instance['deviceIdentifier']
                date=instance['collectionDate']
                date=datetime.datetime.utcfromtimestamp(date/1000.0).replace(tzinfo=pytz.utc)

                answers = api.get_answers(instance['keyId'])
                ec=api.get_answer(answers,questionText='EC waarde - ECOND')
                foto=api.get_answer(answers,questionID='Maak een foto van het meetgebied')
                diep=api.get_answer(answers,questionText='Diep of ondiep')
                waarneming_naam = maak_naam('EC',diep)
                
                if foto:
                    foto = download_photo(os.path.join(akvo.storage,os.path.basename(foto)))
        
                if foto:
                    # update meetpunt photo along the way..
                    meetpunt.photo_url = foto
                    meetpunt.save(update_fields=['photo_url'])
                try:     
                
                    waarneming, created = meetpunt.waarneming_set.get_or_create(naam=waarneming_naam, waarnemer=waarnemer, datum=date, 
                                              defaults = {'waarde': ec, 'device': device, 'opmerking': '', 'foto_url': foto, 'eenheid': 'uS/cm'})
                except Exception as ex:
                    logger.exception('Probleem met toevoegen van waarneming {waar} met waarde {waarde} aan meetpunt {meetpunt}'.format(waar=waarneming_naam, waarde=ec, meetpunt=meetpunt))
                    continue
                
                if created:
                    logger.debug('created {locale}={mp}, {id}({date})={ec}'.format(locale=localeId, mp=unicode(meetpunt), id=waarneming.naam, date=waarneming.datum, ec=waarneming.waarde))
                    num_waarnemingen += 1
                    waarnemingen.add(waarneming)
                    meetpunten.add(meetpunt)
                elif waarneming.waarde != ec:
                    waarneming.waarde = ec
                    waarneming.save()
                    logger.debug('updated {locale}={mp}, {id}({date})={ec}'.format(locale=localeId, mp=unicode(meetpunt), id=waarneming.naam, date=waarneming.datum, ec=waarneming.waarde))
                    num_replaced += 1
                    waarnemingen.add(waarneming)
                    meetpunten.add(meetpunt)
            instances,meta = api.get_survey_instances(surveyId=surveyId, beginDate=beginDate, since=meta['since'])
    logger.info('Aantal nieuwe metingen: {meet}, bijgewerkt: {repl}'.format(meet=num_waarnemingen,repl=num_replaced))
    return meetpunten, waarnemingen
Example #4
0
def importAkvoMonitoring(api,akvo,days):
    meetpunten = set()
    waarnemingen = set()
    num_waarnemingen = 0
    num_replaced = 0

    beginDate=as_timestamp(akvo.last_update + datetime.timedelta(days=-days)) if days else None
    for surveyId in [f.strip() for f in akvo.monforms.split(',')]:
        survey = api.get_survey(surveyId)
        instances,meta = api.get_survey_instances(surveyId=surveyId,beginDate=beginDate)
        while instances:
            for instance in instances:
                submitter = instance['submitterName']
                waarnemer = get_or_create_waarnemer(submitter)
                
                #find related registration form (meetpunt)
                localeId = instance['surveyedLocaleIdentifier']
                try:
                    meetpunt = Meetpunt.objects.get(identifier=localeId)
                except Meetpunt.DoesNotExist:
                    logger.error('Meetpunt {locale} niet gevonden voor {submitter}'.format(locale=localeId, submitter=submitter))
                    continue
                
                device = instance['deviceIdentifier']
                date=instance['collectionDate']
                date=datetime.datetime.utcfromtimestamp(date/1000.0).replace(tzinfo=pytz.utc)

                answers = api.get_answers(instance['keyId'])
                ec=api.get_answer(answers,questionText='EC waarde - ECOND')
                foto=api.get_answer(answers,questionID='Maak een foto van het meetgebied')
                diep=api.get_answer(answers,questionText='Diep of ondiep')
                waarneming_naam = maak_naam('EC',diep)
                
                if foto:
                    foto = download_photo(os.path.join(akvo.storage,os.path.basename(foto)))
        
                if foto:
                    # update meetpunt photo along the way..
                    meetpunt.photo_url = foto
                    meetpunt.save(update_fields=['photo_url'])
                try:     
                
                    waarneming, created = meetpunt.waarneming_set.get_or_create(naam=waarneming_naam, waarnemer=waarnemer, datum=date, 
                                              defaults = {'waarde': ec, 'device': device, 'opmerking': '', 'foto_url': foto, 'eenheid': 'uS/cm'})
                except Exception as ex:
                    logger.exception('Probleem met toevoegen van waarneming {waar} met waarde {waarde} aan meetpunt {meetpunt}'.format(waar=waarneming_naam, waarde=ec, meetpunt=meetpunt))
                    continue
                
                if created:
                    logger.info('{locale}={mp}, {id}({date})={ec}'.format(locale=localeId, mp=unicode(meetpunt), id=waarneming.naam, date=waarneming.datum, ec=waarneming.waarde))
                    num_waarnemingen += 1
                    waarnemingen.add(waarneming)
                    meetpunten.add(meetpunt)
                else:#if waarneming.waarde != ec:
                    waarneming.waarde = ec
                    waarneming.save()
                    logger.info('{locale}={mp}, {id}({date})={ec}'.format(locale=localeId, mp=unicode(meetpunt), id=waarneming.naam, date=waarneming.datum, ec=waarneming.waarde))
                    num_replaced += 1
                    waarnemingen.add(waarneming)
                    meetpunten.add(meetpunt)
            instances,meta = api.get_survey_instances(surveyId=surveyId, beginDate=beginDate, since=meta['since'])
    logger.info('Aantal nieuwe metingen: {meet}, bijgewerkt: {repl}'.format(meet=num_waarnemingen,repl=num_replaced))
    return meetpunten, waarnemingen