<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def allow_pgcodes(cr, *codes):
 """Context manager that will omit specified error codes. E.g., suppose you expect a migration to produce unique constraint violations and you want to ignore them. Then you could just do:: with allow_pgcodes(cr, psycopg2.errorcodes.UNIQUE_VIOLATION):
 cr.execute("INSERT INTO me (name) SELECT name FROM you") .. warning:: **All** sentences inside this context will be rolled back if **a single error** is raised, so the above example would insert **nothing** if a single row violates a unique constraint. This would ignore duplicate files but insert the others:: cr.execute("SELECT name FROM you") for row in cr.fetchall():
 with allow_pgcodes(cr, psycopg2.errorcodes.UNIQUE_VIOLATION):
 cr.execute("INSERT INTO me (name) VALUES (%s)", row[0]) :param *str codes: Undefined amount of error codes found in :mod:`psycopg2.errorcodes` that are allowed. Codes can have either 2 characters (indicating an error class) or 5 (indicating a concrete error). Any other errors will be raised. """

    try:
        with cr.savepoint():
            with core.tools.mute_logger('odoo.sql_db'):
                yield
    except (ProgrammingError, IntegrityError) as error:
        msg = "Code: {code}. Class: {class_}. Error: {error}.".format(
            code=error.pgcode,
            class_=errorcodes.lookup(error.pgcode[:2]),
            error=errorcodes.lookup(error.pgcode))
        if error.pgcode in codes or error.pgcode[:2] in codes:
            logger.info(msg)
        else:
            logger.exception(msg)
            raise