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