sapp/warning_messages.py (45 lines of code) (raw):

# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. # pyre-strict import json import logging from pathlib import Path from sqlalchemy import Table from sqlalchemy.engine import Connection from . import models from .db import DB from .models import WarningMessage log: logging.Logger = logging.getLogger() def upsert_entry( database_connection: Connection, warning_messages_table: Table, code: int, message: str, ) -> None: warning = database_connection.execute( warning_messages_table.select().where(warning_messages_table.c.code == code) ).first() if warning and warning.message != message: database_connection.execute( warning_messages_table.update() .where(warning_messages_table.c.code == code) .values(message=message) ) log.info(f"Updated - {code}: {message}") elif not warning: database_connection.execute( warning_messages_table.insert().values(code=code, message=message) ) log.info(f"Added - {code}: {message}") def update_warning_messages(database: DB, metadata_file: Path) -> None: warning_messages_from_metadata_file = json.loads(metadata_file.read_text())["codes"] warning_messages = { int(code): message for code, message in warning_messages_from_metadata_file.items() } # TODO(T89343050) models.create(database) warning_messages_table = Table( WarningMessage.__tablename__, WarningMessage.metadata ) with database.make_session() as session: with session.connection() as database_connection: for code, message in warning_messages.items(): upsert_entry(database_connection, warning_messages_table, code, message) session.commit()