code: def allow_pgcodes(cr, *codes):
      
      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
docs: 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.