import logging from typing import List import boto3 from db_schema.postgres.connection import Connection, aws_credentials_loader from db_schema.schemas import slz from smelog.entities import LoggerConfig from smelog.factory import LoggerFactory from sqlalchemy.orm.attributes import flag_modified ENV = 'prod' APP_NAME = "db_migration" if __name__ == '__main__': log_config = LoggerConfig( name=APP_NAME, version="1", level=logging.DEBUG, environment=ENV, is_local=True, ) logger = LoggerFactory(log_config).get_logger(APP_NAME) secretsmanager = boto3.client('secretsmanager') conn = Connection( credentials_loader=aws_credentials_loader( secretsmanager, f'delphi/{ENV}/slz/storage/pg_proxy/user' ), name=APP_NAME, version="1", ) try: updated_css = [] while True: content_statuses: List[slz.ContentStatus] = conn.session.query(slz.ContentStatus).filter( slz.ContentStatus.meta_data.has_key('message'), slz.ContentStatus.content_status == slz.ContentStatusEnum.ON_HOLD, slz.ContentStatus.meta_data['version'].astext != '2.0.0', ).order_by(slz.ContentStatus.content_status_id).limit(20).all() if not content_statuses: break for cs in content_statuses: cs.meta_data["message"]['unit_of_work_id'] = cs.unit_of_work_id cs.meta_data['version'] = "2.0.0" flag_modified(cs, "meta_data") updated_css.append(cs.content_status_id) logger.info('processed', cs_id=cs.content_status_id) conn.session.commit() logger.info('updated result', cs_ids=updated_css) except Exception as err: logger.exception(err) conn.session.rollback() finally: conn.disconnect()