backend/bms_app/services/operations/db_mappings.py (41 lines of code) (raw):

# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from bms_app.models import Mapping, SourceDB, db from .objects import DbMapping def get_db_mappings_qs(wave_id=None, db_ids=None, filter_deployable=False): """Return queryset to retrieve source dbs according to the filters.""" qs = db.session.query(SourceDB, Mapping).outerjoin(Mapping) if wave_id: qs = qs.filter(SourceDB.wave_id == wave_id) if db_ids: qs = qs.filter(SourceDB.id.in_(db_ids)) if filter_deployable: qs = qs.filter(SourceDB.is_deployable.is_(True)) return qs def generate_db_mappings_objects(qs): """Get list of SourceDB/Mapping objects. Output: [ DbMapping(db=<SourceDB 1>, mappings=[<Mapping 1>, <Mapping 2>]), DbMapping(db=<SourceDB 2>, mappings=[<Mapping 3>]), .... ] """ data = {} for source_db, mapping in qs.all(): db_id = source_db.id if db_id not in data: data[db_id] = { 'db': source_db, 'mappings': [], } if not mapping: data[db_id]['is_dms'] = True data[db_id]['mappings'].append(mapping) objects = [] for obj in data.values(): objects.append( DbMapping( db=obj['db'], mappings=obj['mappings'], is_dms=obj['is_dms'], ) ) return objects def get_wave_db_mappings_objects(wave_id, db_ids=None, filter_deployable=False): """Return list of DbMapping objects for wave operations.""" qs = get_db_mappings_qs(wave_id, db_ids, filter_deployable) return generate_db_mappings_objects(qs) def get_restore_db_mappings_objects(db_id): """Return list of DbMapping objects for restore operations.""" qs = get_db_mappings_qs(db_ids=[db_id], filter_deployable=False) return generate_db_mappings_objects(qs)