Пример #1
0
def create():
    """ Create restaurateur

        Method: *POST*
        URI: */restaurateurs*
    """

    # Get request values
    datas = request.values

    # Check firstname
    if 'firstname' not in datas:
        return make_response(gettext(u"Le nom est obligatoire."), 400)
    if not isinstance(datas['firstname'], (str, unicode)):
        return make_response(gettext(u"Le nom doit être une chaine de caractère."), 400)

    # Check lastname
    if 'lastname' not in datas:
        return make_response(gettext(u"Le prénom est obligatoire."), 400)
    if not isinstance(datas['lastname'], (str, unicode)):
        return make_response(gettext(u"Le prénom doit être une chaine de caractère."), 400)

    # Check mail
    if 'mail' not in datas:
        return make_response(gettext(u"L'adresse mail est obligatoire."), 400)
    if not isinstance(datas['mail'], (str, unicode)):
        return make_response(gettext(u"L'adresse mail doit être une chaine de caractère."), 400)
    if len(db.session.query(Personne).filter(Personne.mail == datas['mail']).all()) > 0:
        return make_response(gettext(u"L'adresse mail est deja utilisee par un utilisateur."), 400)

    # Check password
    if 'password' not in datas:
        return make_response(gettext(u"Le mot de passe est obligatoire."), 400)
    if not isinstance(datas['password'], (str, unicode)):
        return make_response(gettext(u"Le mot de passe doit être une chaine de caractère."), 400)

    # Check phone
    if 'phone' not in datas:
        return make_response(gettext(u"Le numéro de téléphone est obligatoire."), 400)
    if not isinstance(datas['phone'], (str, unicode)):
        return make_response(gettext(u"Le numéro de téléphone doit être une chaine de caractère."), 400)

    # Check address
    if 'address' not in datas:
        return make_response(gettext(u"L'adresse est obligatoire."), 400)
    if not isinstance(datas['address'], (str, unicode)):
        return make_response(gettext(u"L'adresse doit être une chaine de caractère."), 400)

    # Check zipcode
    if 'zipcode' not in datas:
        return make_response(gettext(u"Le code postal est obligatoire."), 400)
    if not isinstance(datas['zipcode'], (str, unicode)):
        return make_response(gettext(u"Le code postal doit être une chaine de caractère."), 400)

    # Check city
    if 'city' not in datas:
        return make_response(gettext(u"La ville est obligatoire."), 400)
    if not isinstance(datas['city'], (str, unicode)):
        return make_response(gettext(u"La ville doit être une chaine de caractère."), 400)

    # Check country
    if 'country_id' not in datas:
        return make_response(gettext(u"Le pays est obligatoire."), 400)
    try:
        country_id = int(datas['country_id'])
    except Exception:
        return make_response(gettext(u"country_id doit être un identifiant."), 400)

    country = db.session.query(Country).get(country_id)
    if country is None:
        return make_response(gettext(u"Le pays n'existe pas."), 404)

    # Create restaurateur
    restaurateur = Restaurateur(firstname=datas['firstname'], lastname=datas['lastname'], phone=datas['phone'], address=datas['address'], zipcode=datas['zipcode'], city=datas['city'], country=country, mail=datas['mail'], password=datas['password'])
    db.session.flush()
    restaurateur.create_order_address()

    # Check birthdate
    if 'birthdate' in datas:
        try:
            birthdate = datetime.datetime.strptime(datas['birthdate'], '%Y-%m-%dT%H:%M:%S.%fZ')
        except:
            return make_response(gettext(u"Le format de la date est invalide."), 400)
        restaurateur.birthdate = birthdate

    # Check restaurant
    if 'restaurant_id' in datas:
        try:
            restaurant_id = int(datas['restaurant_id'])
        except Exception:  # pragma: no cover
            return make_response(gettext(u"restaurant_id doit être un identifiant."), 400)

        restaurant = db.session.query(Restaurant).get(restaurant_id)
        if restaurant is None:
            return make_response(gettext(u"Le restaurant n'existe pas."), 404)
        if restaurant.restaurateur is not None:
            return make_response(gettext(u"Le restaurant est déjà assigné à un restaurateur."), 400)

        restaurateur.restaurant = restaurant

    # Add restaurateur
    db.session.add(restaurateur)

    # Commit
    try:
        db.session.commit()
    except Exception:  # pragma: no cover
        db.session.rollback()
        return make_response(gettext(u"Dûe à une erreur inconnu, le restaurateur ne peut pas être créé."), 500)

    # Build the response
    response = make_response(jsonify(restaurateur.to_dict()))
    response.status_code = 201
    response.mimetype = 'application/json'
    return response