def restize_integrity_error(internal_error):
     if "unique_allocine_venue_provider_price_rule" in str(
             internal_error.orig):
         return [
             "global", "Vous ne pouvez avoir qu''un seul prix par catégorie"
         ]
     if "check_price_is_not_negative" in str(internal_error.orig):
         return ["global", "Vous ne pouvez renseigner un prix négatif"]
     return PcObject.restize_integrity_error(internal_error)
def save(*models: Model) -> None:
    if not models:
        return None

    api_errors = ApiErrors()
    for model in models:
        with db.session.no_autoflush:
            model_api_errors = entity_validator.validate(model)
        if model_api_errors.errors.keys():
            api_errors.errors.update(model_api_errors.errors)
        else:
            db.session.add(model)

    if api_errors.errors.keys():
        db.session.rollback()
        raise api_errors

    try:
        db.session.commit()
    except DataError as data_error:
        api_errors.add_error(*models[0].restize_data_error(data_error))
        db.session.rollback()
        raise api_errors
    except IntegrityError as integrity_error:
        api_errors.add_error(*models[0].restize_integrity_error(integrity_error))
        db.session.rollback()
        raise api_errors
    except InternalError as internal_error:
        api_errors.add_error(*models[0].restize_internal_error(internal_error))
        db.session.rollback()
        raise api_errors
    except TypeError as type_error:
        api_errors.add_error(*PcObject.restize_type_error(type_error))
        db.session.rollback()
        raise api_errors
    except ValueError as value_error:
        api_errors.add_error(*PcObject.restize_value_error(value_error))
        db.session.rollback()
        raise api_errors

    if api_errors.errors.keys():
        raise api_errors

    return None
Beispiel #3
0
 def restize_internal_error(ie):
     if "check_stock" in str(ie.orig):
         if "quantity_too_low" in str(ie.orig):
             return ["quantity", "Le stock total ne peut être inférieur au nombre de réservations"]
         if "bookingLimitDatetime_too_late" in str(ie.orig):
             return [
                 "bookingLimitDatetime",
                 "La date limite de réservation pour cette offre est postérieure à la date de début de l'évènement",
             ]
         logger.error("Unexpected error in patch stocks: %s", ie)
     return PcObject.restize_internal_error(ie)
 def restize_internal_error(ie: Exception) -> list[str]:
     if "tooManyBookings" in str(ie.orig):
         return [
             "global",
             "La quantité disponible pour cette offre est atteinte."
         ]
     if "insufficientFunds" in str(ie.orig):
         return [
             "insufficientFunds",
             "Le solde de votre pass est insuffisant pour réserver cette offre."
         ]
     return PcObject.restize_integrity_error(ie)
 def restize_data_error(data_error):
     if "wrong_price" in str(data_error):
         return ["global", "Le prix doit être un nombre décimal"]
     return PcObject.restize_integrity_error(data_error)
 def restize_integrity_error(internal_error):
     if "unique_venue_provider" in str(internal_error.orig):
         return ["global", "Votre lieu est déjà lié à cette source"]
     return PcObject.restize_integrity_error(internal_error)