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
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
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
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