def assign_source_db_wave()

in backend/bms_app/wave/services/waves.py [0:0]


def assign_source_db_wave(wave, db_ids):
    """Assign wave to databases, and count assigned, skipped and unmapped"""
    assigned = skipped = unmapped = 0

    # join Mapping in order to know if db is mapped to any target
    query = db.session.query(SourceDB, func.count(Mapping.id))\
        .outerjoin(Mapping, SourceDB.id == Mapping.db_id)\
        .filter(
            SourceDB.id.in_(db_ids),
            SourceDB.project_id == wave.project_id) \
        .group_by(SourceDB)\
        .all()

    for source_db, mapp_count in query:
        if not mapp_count and source_db.db_engine == SourceDBEngine.ORACLE:
            unmapped += 1
        # assign only db without any operation
        elif source_db.status == SourceDBStatus.EMPTY and \
                (not source_db.wave or not source_db.wave.is_running):
            source_db.wave_id = wave.id
            assigned += 1
        else:
            skipped += 1

    db.session.commit()

    return {
        'assigned': assigned,
        'skipped': skipped,
        'unmapped': unmapped,
    }