mangroveorg/datawinners

View on GitHub
migration/couch/release_9/6.2636_migration_to_add_location_field_to_admins.py

Summary

Maintainability
A
35 mins
Test Coverage
import sys

if __name__ == "__main__" and __package__ is None:
    sys.path.insert(0, ".")

#noinspection PyUnresolvedReferences - used to initialize post save handlers for elasticsearch
import datawinners.search
from mangrove.datastore.entity import get_all_entities
from datawinners.main.database import get_db_manager
from datawinners.main.couchdb.utils import all_db_names

import logging
from migration.couch.utils import migrate, mark_as_completed


def _add_location_field_if_absent(datasender, dbm, logger):
    if "location" not in datasender.data and '_geo' in datasender.aggregation_paths.keys():
        logger.info('Adding location field to datasender %s' % datasender.short_code)
        data = ("location", datasender.aggregation_paths["_geo"], get_datadict_type_by_slug(dbm, slug='location'))
        datasender.update_latest_data([data])
    else:
        logger.info('Location field already present for datasender %s' % datasender.short_code)

def migration_to_add_location_field_to_datasenders(db_name):
    logger = logging.getLogger(db_name)
    dbm = get_db_manager(db_name)
    mark_as_completed(db_name)
    logger.info('Migration started for database %s' % db_name)
    all_ds = get_all_entities(dbm, ['reporter'])
    for ds in all_ds:
        _add_location_field_if_absent(ds, dbm, logger)

migrate(all_db_names(), migration_to_add_location_field_to_datasenders, version=(9, 0, 6))