def create_artist_submission(): form = ArtistForm() if form.validate_on_submit(): try: artist = Artist( name=form.name.data, city=form.city.data, state=form.state.data, phone=form.phone.data, image_link=form.image_link.data if form.image_link.data else None, facebook_link=form.facebook_link.data if form.facebook_link.data else None, genres=form.genres.data, website=form.website.data if form.website.data else None, seeking_venue=True if form.seeking_venue_description.data else False, seeking_description=form.seeking_venue_description.data if form.seeking_venue_description.data else None) db.session.add(artist) db.session.commit() flash('Artist ' + form.name.data + ' was successfully listed!') return render_template('pages/home.html') except Exception: db.session.rollback() print(sys.exc_info()) flash('An error occurred. Artist ' + form.name.data + ' could not be listed.') return render_template('pages/home.html') finally: db.session.close() else: return render_template('forms/new_artist.html', form=form)
def edit_artist_submission(artist_id): form = ArtistForm() if form.validate_on_submit(): data = request.form try: is_seeking_venue = True if data['seeking_description'].strip( ) else False artist = Artist.query.get(artist_id) artist.name = data['name'] artist.city = data['city'] artist.state = data['state'] artist.genres = request.form.getlist('genres') artist.phone = data['phone'] artist.image_link = data['image_link'] artist.facebook_link = data['facebook_link'] artist.website = data['website'] artist.seeking_venue = is_seeking_venue artist.seeking_description = data['seeking_description'] db.session.commit() flash(f'Artist {data["name"]} was successfully edited!') except: db.session.rollback() flash( f'An error occurred. Artist {data["name"]} could not be edited.' ) finally: db.session.close() # Flashing form validation errors for input, errors in form.errors.items(): flash(f'Invalid value for "{input}". {"".join(errors)}') return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist(): """Either load the blank form or submit a filled form to create a new artist.""" form = ArtistForm(request.form) if request.method == 'POST': if form.validate_on_submit(): artist = Artist(name=form.name.data, genres=json.dumps(form.genres.data), city=form.city.data, state=form.state.data, phone=form.phone.data, facebook_link=form.facebook_link.data, website=form.website.data, seeking_venue=form.seeking_venue.data, seeking_description=form.seeking_description.data, email=form.email.data, image_link=form.image_link.data) try: db.session.add(artist) db.session.commit() message = f'Artist {artist.name} was successfully listed!', 'info' except: db.session.rollback() message = f'An error occurred. Artist {artist.name} could not be listed.', 'danger' flash(*message) return redirect(url_for('index')) else: errors = form.errors for e in errors: flash(f'{e}: {errors[e][0]}', 'danger') return render_template('forms/new_artist.html', form=form)
def create_artist_submission(): error = False form = ArtistForm() try: if form.validate_on_submit(): if form.seeking_venue.data == 'True': seeking = True else: seeking = False artist = Artist(name=form.name.data, city=form.city.data, state=form.state.data, phone=form.phone.data, image_link='', facebook_link=form.facebook_link.data, genres=form.genres.data, website=form.website.data, seeking_venue=seeking, seeking_description=form.seeking_description.data) db.session.add(artist) db.session.commit() flash('Artist {} was successfully listed!'.format(form.name.data)) return redirect(url_for('index')) flash('An error occurred. Artist {} could not be listed. {}'.format( form.name.data, form.errors)) except (): db.session.rollback() error = True print(sys.exc_info()) finally: db.session.close() if error: abort(500) flash('There was an error, please try again.') return render_template('forms/new_artist.html', form=form)
def edit_artist_submission(artist_id): form = ArtistForm(request.form) # TODO: take values from the form submitted, and update existing if form.validate_on_submit(): try: a = db.session.query(Artist).get(artist_id) a.name = form.name.data a.city = form.city.data a.state = form.state.data a.phone = form.phone.data a.facebook_link = form.facebook_link.data a.genres = form.genres.data a.image_link = form.image_link.data a.website = form.website.data a.seeking_venue = bool(form.seeking_venue.data) a.seeking_description = form.seeking_description.data # artist record with ID <artist_id> using the new attributes db.session.commit() flash('Artist ' + request.form['name'] + ' was successfully updated!') # TODO: on unsuccessful db insert, flash an error instead. except: flash('An error occurred. Artist ' + form.name.data + ' could not be updated.') db.session.rollback() print(sys.exc_info()) finally: db.session.close() return redirect(url_for('show_artist', artist_id=artist_id)) else: print(form.errors) return render_template('forms/edit_artist.html', form=form)
def edit_artist_submission(artist_id): artist = Artist.query.get(artist_id) form = ArtistForm() error = False try: if form.validate_on_submit(): artist.name = form.name.data artist.genres = form.genres.data artist.city = form.city.data artist.state = form.state.data artist.phone = form.phone.data artist.website = form.website.data artist.facebook_link = form.facebook_link.data artist.seeking_venue = form.seeking_venue.data artist.seeking_description = form.seeking_description.data artist.image_link = form.image_link.data db.session.add(artist) db.session.commit() else: raise Exception('Form validation failed') except Exception as e: print('edit_artist_submission: ', e) db.session.rollback() print(sys.exc_info()) error = True finally: db.session.close() if error: flash('An error occurred. Artist ' + request.form['name'] + ' could not be updated.') return render_template('forms/edit_artist.html', form=form, artist=artist) else: flash('Artist ' + request.form['name'] + ' was successfully updated!') return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): form = ArtistForm() if form.validate_on_submit(): try: artist = Artist() artist.name = request.form['name'] artist.city = request.form['city'] artist.state = request.form['state'] artist.phone = request.form['phone'] artist.image_link = request.form['image_link'] artist.genres = request.form.getlist('genres') artist.facebook_link = request.form['facebook_link'] artist.website = request.form['website'] artist.seeking_venue = True if 'seeking_venue' in request.form else False artist.seeking_description = request.form['seeking_description'] db.session.add(artist) db.session.commit() except Exception as e: db.session.rollback() flash( 'An error occurred. Artist {} Could not be listed!, {}'.format( request.form['name'], str(e))) finally: db.session.close() flash('Artist {} was successfully listed!'.format( request.form['name'])) return redirect(url_for('artists')) return render_template('forms/new_artist.html', form=form)
def create_artist_submission(): form = ArtistForm() if form.validate_on_submit(): data = request.form try: is_seeking_venue = True if data['seeking_description'].strip( ) else False artist = Artist(name=data['name'], city=data['city'], state=data['state'], genres=request.form.getlist('genres'), phone=data['phone'], image_link=data['image_link'], facebook_link=data['facebook_link'], website=data['website'], seeking_venue=is_seeking_venue, seeking_description=data['seeking_description']) db.session.add(artist) db.session.commit() flash(f'Artist {data["name"]} was successfully listed!') except: db.session.rollback() flash( f'An error occurred. Artist {data["name"]} could not be listed.' ) finally: db.session.close() return render_template('pages/home.html') # Flashing current errors for input, errors in form.errors.items(): flash(f'Invalid value for "{input}". {"".join(errors)}') return render_template('forms/new_artist.html', form=form)
def create_artist_submission(): artist = Artist() form = ArtistForm() if not form.validate_on_submit(): flash('Invalid value found in ' + ', '.join(form.errors.keys()) + ' field(s).') return render_template('forms/new_artist.html', form=form) else: error = False try: form.populate_obj(artist) artist.phone = format_phone(artist.phone) db.session.add(artist) db.session.flush() artist_id = artist.id db.session.commit() except: error = True db.session.rollback() finally: db.session.close() if error: flash('An error occurred. Artist ' + artist.name + ' could not be listed.') return redirect(url_for('index')) else: flash('Artist ' + request.form['name'] + ' was successfully listed!') return redirect(url_for('show_artist', artist_id=artist_id))
def edit_artist_submission(artist_id): try: request_data = {**request.form} request_data['genres'] = ','.join(request.form.getlist('genres') or []) request_data['seeking_venue'] = (request_data.get('seeking_venue') or '').lower() == 'y' form = ArtistForm(**request_data) if not form.validate_on_submit(): artist = Artist.query.filter_by(id=artist_id).first() return render_template('forms/edit_artist.html', form=form, artist=artist) request_data.pop('csrf_token', None) Artist.query.filter_by(id=artist_id).update(request_data) db.session.commit() flash(f'Artist {request.form["name"]} was successfully updated!') except: flash(f'Artist {request.form["name"]} was not updated!') db.session.rollback() finally: db.session.close() return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): # called upon submitting the new artist listing form # insert form data as a new Venue record in the db, instead # modify data to be the data object returned from db insertion form = ArtistForm(request.form, meta={"csrf": False}) if form.validate_on_submit(): try: artist: Artist = Artist() form.populate_obj(artist) db.session.add(artist) db.session.commit() # on successful db insert, flash success flash(f"Artist {request.form['name']} was successfully listed!") except ValueError as e: print(sys.exc_info()) db.session.rollback() # on unsuccessful db insert, flash an error instead. flash(f"An error occurred: {str(e)}") finally: db.session.close() else: error_msg = [] for field, error in form.errors.items(): error_msg.append(f"{field}: {str(error)}") flash(f"Error occurred: {str(error_msg)}") return render_template('pages/home.html')
def edit_artist(artist_id): # it must be imported here to avoid circular import from forms import ArtistForm artist = Artist.query.get_or_404(artist_id) form = ArtistForm(obj=artist) artist_name = artist.name if form.validate_on_submit(): form.populate_obj(artist) try: db.session.add(artist) db.session.commit() except SQLAlchemyError: flash('An error occurred. Artist ' + artist_name + ' could not be edited.') print(sys.exc_info()) db.session.rollback() db.session.close() return render_template('forms/edit_artist.html', form=form, artist_name=artist_name) return redirect(url_for('show_artist', artist_id=artist_id)) return render_template('forms/edit_artist.html', form=form, artist_name=artist_name)
def edit_artist_submission(artist_id): artist = Artist.query.get(artist_id) if Artist is None: abort(404) name = Artist.name form = ArtistForm() if not form.validate_on_submit(): flash('Invalid value found in ' + ', '.join(form.errors.keys()) + ' field(s).') return render_template('forms/edit_artist.html', form=form, artist=artist) else: error = False try: edited = Artist() form.populate_obj(edited) for col in Artist.__table__.columns.keys(): if col != 'id': setattr(artist, col, getattr(edited, col)) name = artist.name artist.phone = format_phone(artist.phone) db.session.commit() except: error = True db.session.rollback() finally: db.session.close() if error: flash('An error occurred. Artist ' + name + ' could not be updated.') return redirect(url_for('index')) else: flash('Artist ' + name + ' was successfully updated!') return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): # called upon submitting the new artist listing form form = ArtistForm(request.form) # TODO: insert form data as a new Venue record in the db, instead if form.validate_on_submit(): try: name = form.name.data city = form.city.data state = form.state.data phone = form.phone.data facebook_link = form.facebook_link.data genres = form.genres.data image_link = form.image_link.data website = form.website.data seeking_venue = form.seeking_venue.data seeking_description = form.seeking_description.data artist = Artist(name=name, city=city, state=state, phone=phone, facebook_link=facebook_link, genres=genres, image_link=image_link, website=website, seeking_venue=bool(seeking_venue), seeking_description=seeking_description) db.session.add(artist) db.session.commit() # TODO: modify data to be the data object returned from db insertion # on successful db insert, flash success flash('Artist ' + request.form['name'] + ' was successfully listed!') # TODO: on unsuccessful db insert, flash an error instead. except: flash('An error occurred. Artist ' + form.name.data + ' could not be listed.') db.session.rollback() print(sys.exc_info()) finally: db.session.close() return render_template('pages/home.html') else: print(form.errors) return render_template('forms/new_artist.html', form=form)
def edit_artist_submission(artist_id): """ Submit call back for edit artist form """ # Get form data name = request.form['name'] city = request.form['city'] state = request.form['state'] phone = request.form['phone'] image_link = request.form['image_link'] facebook_link = request.form['facebook_link'] website = request.form['website'] seeking_venue = request.form['seeking_venue'] == 'Yes' seeking_description = request.form['seeking_description'] # genres is a list genres = request.form.getlist('genres') form = ArtistForm() # Validate form data if not form.validate_on_submit(): flash(form.errors) return redirect(url_for('edit_artist_submission')) error = False try: # Update artist instance with form data artist = Artist.query.get(artist_id) artist.name = name artist.city = city artist.state = state artist.phone = phone artist.image_link = image_link artist.facebook_link = facebook_link artist.website = website artist.seeking_venue = seeking_venue artist.seeking_description = seeking_description db.session.add(artist) # Delete old generes for x in artist.genres: db.session.delete(x) # Creating Artist generes instances and assigning using backref for genre in genres: new_genre = ArtistsGenres(genre=genre) new_genre.artist = artist # backref db.session.add(new_genre) db.session.commit() except Exception as err: print(err) db.session.rollback() error = True finally: db.session.close() if error: flash(f'An error occurred. Artist {name} could not be updated.') abort(500) flash(f'Artist {name} updated successfully') return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): """ Submit callback for create artists form """ # Get form data name = request.form['name'] city = request.form['city'] state = request.form['state'] phone = request.form['phone'] image_link = request.form['image_link'] facebook_link = request.form['facebook_link'] website = request.form['website'] seeking_venue = request.form['seeking_venue'] == 'Yes' seeking_description = request.form['seeking_description'] # genres is a list genres = request.form.getlist('genres') form = ArtistForm() # Validate form data if not form.validate_on_submit(): flash(form.errors) return redirect(url_for('create_artist_submission')) error = False try: # Create a venue instance using form data artist = Artist( name=name, city=city, state=state, phone=phone, image_link=image_link, facebook_link=facebook_link, website=website, seeking_venue=seeking_venue, seeking_description=seeking_description ) db.session.add(artist) # Creating Artist generes instances and assigning using backref for genre in genres: new_genre = ArtistsGenres(genre=genre) new_genre.artist = artist # backref db.session.add(new_genre) db.session.commit() except Exception as err: print(err) db.session.rollback() error = True finally: db.session.close() if error: flash(f'An error occurred. Artist {name} could not be listed.') abort(500) flash(f'Artist {name} listed successfully') return render_template('pages/home.html')
def enter_band(): """ Display the artist entry page to the user and handle their input. """ form = ArtistForm() if form.validate_on_submit(): return band_info(form.name.data) else: return render_template('enter_band.html', form=form)
def create_artist_submission(): error = False form = ArtistForm(request.form) if form.validate_on_submit(): data = request.form city_name = data.get('city') city_state = data.get('state') name = data.get('name') genres = format_genres(data) phone = format_phone_number(data.get('phone')) image_link = data.get('image_link') facebook_link = data.get('facebook_link') website = data.get('website') seeking_venue = True if data.get('seeking_venue') else False seeking_description = data.get('seeking_description') try: city_id = City.get_id(city_state=city_state, city_name=city_name) if city_id is None: error = True new_artist = Artist(name=name, city_id=city_id, genres=genres, phone=phone, image_link=image_link, facebook_link=facebook_link, website=website, seeking_venue=seeking_venue, seeking_description=seeking_description) db.session.add(new_artist) db.session.flush() artist_id = new_artist.id db.session.commit() flash('Artist ' + new_artist.name + ' was successfully listed!') except: db.session.rollback() print(sys.exc_info()) error = True finally: db.session.close() else: error = True if error: flash('An error occurred. Artist ' + name + ' could not be listed.') return abort(500) else: return redirect(url_for('show_artist', artist_id=artist_id))
def edit_artist(artist_id: int): """ Edit an artist :param artist_id: id of the artist to edit A GET returns the form to be edited A POST persists the updates """ artist, as_type, no_availability = artist_to_edit(artist_id) model = MultiDict(artist) availability = availability_by_artist(artist_id, as_type=as_type) if availability is None: availability = no_availability if request.method == 'GET': for key, value in model_items(availability, ignore=IGNORE_AVAILABILITY): if key == 'from_date': model.add(key, datetime_to_str(current_datetime())) elif is_available_time_key(key) and value is not None: model.add(key, time_to_str(value)) form = ArtistForm(formdata=model) genres = model.getlist("genres") else: form = ArtistForm() genres = form.genres.data # set choices & validators based on possible options set_genre_field_options(form.genres, genres) if request.method == 'POST' and form.validate_on_submit(): success, artist_name = update_artist(artist["id"], form, availability) return update_result(success, artist_name, 'Artist', url_for('display_artist', artist_id=artist_id)) return render_template('forms/edit_artist.html', form=form, artist_name=model["name"], title='Edit Artist', submit_action=url_for('edit_artist', artist_id=artist_id), cancel_url=url_for('display_artist', artist_id=artist_id), submit_text='Update', submit_title='Update artist')
def create_artist_submission(): form = ArtistForm(request.form) facebook_link = form.facebook_link.data\ if form.facebook_link.data != "" else None image_link = form.image_link.data\ if form.image_link.data != "" else None website = form.website.data\ if form.website.data != "" else None seeking_venue = True\ if form.seeking_description.data != "" else False seeking_description = form.seeking_description.data\ if form.seeking_description.data != "" else None if form.validate_on_submit(): error = False print(form.genres.data) try: artist = Artist(name=form.name.data, city=form.city.data, state=form.state.data, phone=form.phone.data, genres=",".join(form.genres.data), facebook_link=facebook_link, image_link=image_link, website=website, seeking_venue=seeking_venue, seeking_description=seeking_description) artist.insert() except Exception: error = True db.session.rollback() print(exc_info()) finally: db.session.close() if error: flash('An error occurred. Artist ' + str(form.name.data) + 'could not be listed.') else: flash('Artist ' + str(form.name.data) + ' was successfully\ listed!') return render_template('pages/home.html') else: flash('Please ensure all details provided are valid') return render_template('forms/new_artist.html', form=form)
def edit_artist_submission(artist_id): form = ArtistForm(request.form) facebook_link = form.facebook_link.data\ if form.facebook_link.data != "" else None image_link = form.image_link.data\ if form.image_link.data != "" else None website = form.website.data\ if form.website.data != "" else None seeking_venue = True\ if form.seeking_description.data != "" else False seeking_description = form.seeking_description.data\ if form.seeking_description.data != "" else None artist = Artist.query.get(artist_id) if form.validate_on_submit(): error = False try: artist.name = form.name.data artist.city = form.city.data artist.state = form.state.data artist.phone = form.phone.data artist.genres = ",".join(form.genres.data) artist.facebook_link = facebook_link artist.image_link = image_link artist.website = website artist.seeking_venue = seeking_venue artist.seeking_description = seeking_description artist.update() except Exception: error = True db.session.rollback() print(exc_info()) finally: db.session.close() if error: flash('An error occurred. Artist ' + str(form.name.data) + 'could not be updated.') else: flash('Artist ' + str(form.name.data) + ' was successfully\ updated!') return redirect(url_for('show_artist', artist_id=artist_id)) else: flash('Please ensure all details are valid') return render_template('forms/edit_artist.html', form=form, artist=artist)
def edit_artist_submission(artist_id): form = ArtistForm(request.form) # fix to get all selected values from form. error = False data = request.form print(json.dumps(data, indent=4)) if form.validate_on_submit(): city_name = data.get('city') city_state = data.get('state') city_id = City.get_id(city_state=city_state, city_name=city_name) if city_id is None: error = True name = data.get('name') genres = format_genres(data) phone = data.get('phone') facebook_link = data.get('facebook_link') image_link = data.get('image_link') website = data.get('website') seeking_venue = True if data.get('seeking_venue') else False seeking_description = data.get('seeking_description') try: artist = Artists.query.get(artist_id) artist.name = name artist.city_id = city_id artist.genres = genres artist.phone = phone artist.image_link = image_link artist.website = website artist.facebook_link = facebook_link artist.seeking_venue = seeking_venue artist.seeking_description = seeking_description db.session.commit() flash('Artist ' + name + ' was successfully updated!') except: db.session.rollback() print(sys.exc_info()) flash('An error occurred. Artist ' + name + ' could not be updated.') error = True finally: db.session.close() else: error = True if error: return abort(500) else: return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): form = ArtistForm(request.form) if not form.validate_on_submit(): flash('An error occurred. Artist ' + request.form['name'] + ' could not be listed.') return render_template('pages/home.html') error = False try: artist = Artist() artist.name = request.form['name'] temp_state = State.query.filter( State.name == request.form['state']).one_or_none() if temp_state is None: temp_state = State(name=request.form['state']) db.session.add(temp_state) artist.state = temp_state temp_city = City.query.filter( City.name == request.form['city']).one_or_none() if temp_city is None: temp_city = City(name=request.form['city'], state_id=temp_state.id) db.session.add(temp_city) artist.city = temp_city artist.phone = request.form['phone'] temp_genres = [] for genre_name in request.form.getlist('genres'): genre = Genre.query.filter( Genre.name == genre_name.strip()).one_or_none() if genre is not None: temp_genres.append(genre) artist.genres = temp_genres artist.facebook_link = request.form['facebook_link'] db.session.add(artist) db.session.commit() except Exception: error = True print(Exception.__name__) db.session.rollback() print(sys.exc_info()) finally: db.session.close() if error: flash('An error occurred. Artist ' + request.form['name'] + ' could not be listed.') else: flash('Artist ' + request.form['name'] + ' was successfully listed!') return render_template('pages/home.html')
def edit_artist_submission(artist_id): form = ArtistForm(request.form) if not form.validate_on_submit(): flash('An error occurred. Artist could not be changed.') return render_template('pages/home.html') error = False artist = Artist.query.get(artist_id) try: artist.name = request.form['name'] temp_state = State.query.filter( State.name == request.form['state']).one_or_none() if temp_state is None: temp_state = State(name=request.form['state']) db.session.add(temp_state) artist.state = temp_state temp_city = City.query.filter( City.name == request.form['city']).one_or_none() if temp_city is None: temp_city = City(name=request.form['city'], state_id=temp_state.id) db.session.add(temp_city) artist.city = temp_city artist.phone = request.form['phone'] temp_genres = [] for genre_name in request.form.getlist('genres'): genre = Genre.query.filter( Genre.name == genre_name.strip()).one_or_none() if genre is not None: temp_genres.append(genre) artist.genres = temp_genres artist.image_link = request.form['image_link'] artist.facebook_link = request.form['facebook_link'] artist.website = request.form['website'] artist.seeking_venue = True if 'seeking_venue' in request.form else False artist.seeking_description = request.form['seeking_description'] db.session.commit() except Exception: error = True db.session.rollback() print(sys.exc_info()) finally: db.session.close() if error: flash('An error occurred. Artist could not be changed.') if not error: flash('Artist was successfully updated!') return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): # called upon submitting the new artist listing form # TODO: insert form data as a new Venue record in the db, instead # TODO: modify data to be the data object returned from db insertion # on successful db insert, flash success # TODO: on unsuccessful db insert, flash an error instead. # e.g., flash('An error occurred. Artist ' + data.name + ' could not be listed.') error = False try: form = ArtistForm() if form.validate_on_submit(): new_artist = Artist( name=form.name.data, city=form.city.data, state=form.state.data, phone=form.phone.data, genres=','.join(form.genres.data), image_link=form.image_link.data, facebook_link=form.facebook_link.data, website=form.website.data, seeking_venue=form.seeking_venue.data, seeking_description=form.seeking_description.data, ) db.session.add(new_artist) db.session.commit() else: error = True for fieldName, errorMessages in form.errors.items(): for err in errorMessages: print(err, file=sys.stdout) except: error = True db.session.rollback() print(sys.exc_info()) finally: db.session.close() if (error): flash('Error!') return render_template('forms/new_artist.html', form=form) else: flash('Artist ' + request.form['name'] + ' was successfully listed!') return redirect(url_for('index')) return render_template('forms/new_artist.html', form=form)
def create_artist_submission(): form = ArtistForm() if not form.validate_on_submit(): flash(f'An error occurred. Artist could not be listed.', 'error') return render_template('pages/home.html') try: new_artist = Artist.from_dict(form.data) db.session.add(new_artist) db.session.commit() flash(f'Artist {new_artist.name} was successfully listed!') except Exception as e: print(e) abort(500) finally: db.session.close() return render_template('pages/home.html')
def create_artist(): """ Create an artist A GET returns an empty form A POST submits the info """ is_post = (request.method == 'POST') form = ArtistForm() if is_post: genres = form.genres.data else: genres = list() # set choices & validators based on possible options set_genre_field_options(form.genres, genres) if is_post and form.validate_on_submit(): artist = populate_artist(artist_factory(FactoryObj.OBJECT), form) availability = populate_availability( availability_factory(FactoryObj.OBJECT), form) # check for existing artist artist_id, artist_name = existing_artist( *extract_unique_properties(artist)) if artist_id is not None: url = url_for('display_artist', artist_id=artist_id) flash( Markup(f'A listing for {artist_name} already exists! ' f'Please see <a href="{url}">{artist_name}</a>.')) else: # add artist success, artist_name = create_artist_impl(artist, availability) return create_result(success, artist_name, 'Artist') return render_template('forms/edit_artist.html', form=form, title='Create Artist', submit_action=url_for('create_artist'), cancel_url=url_for('index'), submit_text='Create', submit_title='Create artist')
def create_artist_submission(): form = ArtistForm() error = False try: if form.validate_on_submit(): artist = Artist( name=form.name.data, city=form.city.data, state=form.state.data, phone=form.phone.data, genres=form.genres.data, image_link=form.image_link.data, facebook_link=form.facebook_link.data, website=form.website.data, seeking_venue=form.seeking_venue.data, seeking_description=form.seeking_description.data ) db.session.add(artist) db.session.commit() # TODO: insert form data as a new Venue record in the db, instead # TODO: modify data to be the data object returned from db # insertion else: raise Exception('Form validation failed') except Exception as e: print('create_artist_submission: ', e) db.session.rollback() print(sys.exc_info()) error = True finally: db.session.close() # on successful db insert, flash success if error: # TODO: on unsuccessful db insert, flash an error instead. # e.g., flash('An error occurred. Venue ' + data.name + ' could not be # listed.') flash('An error occurred. Artist ' + request.form['name'] + ' could not be listed.') return render_template('forms/new_artist.html', form=form) else: flash('Artist ' + request.form['name'] + ' was successfully listed!') return render_template('pages/home.html')
def edit_artist_submission(artist_id): form = ArtistForm() if not form.validate_on_submit(): flash(f'An error occurred. Artist could not be updated.', 'error') return redirect(url_for('show_artist', artist_id=artist_id)) try: artist = Artist.query.get(artist_id) for key in form.data: if form.data.get(key) is not None: setattr(artist, key, form.data.get(key)) db.session.commit() flash(f'Artist {artist.name} was successfully updated!') except: db.session.rollback() abort(500) finally: db.session.close() return redirect(url_for('show_artist', artist_id=artist_id))
def create_artist_submission(): # called upon submitting the new artist listing form # TODO: insert form data as a new Venue record in the db, instead # TODO: modify data to be the data object returned from db insertion form = ArtistForm() name = form.name.data created = False if form.validate_on_submit(): try: attrs = { attr: getattr(form, attr).data for attr in ARTIST_SIMPLE_ATTRS } genres = ",".join(x for x in form.genres.data) new_artist = Artist(**attrs, genres=genres, available_times=[ AvailableTime(**data) for data in form.available_times.data ]) db.session.add(new_artist) db.session.commit() # on successful db insert, flash success created = True flash("Artist " + name + " was successfully listed!") except: print(sys.exc_info()) finally: db.session.close() if created: return redirect(url_for("index")) # TODO: on unsuccessful db insert, flash an error instead. flash("An error occurred. Artist " + name + " could not be listed.") return render_template("forms/new_artist.html", form=form)
def create_artist(): # it must be imported here to avoid circular import from forms import ArtistForm form = ArtistForm() if form.validate_on_submit(): artist = Artist() form.populate_obj(artist) try: db.session.add(artist) db.session.commit() except SQLAlchemyError: flash('An error occurred. Artist ' + form.name.data + ' could not be listed.') print(sys.exc_info()) db.session.rollback() db.session.close() return render_template('forms/new_artist.html', form=form) flash('Artist ' + artist.name + ' was successfully listed!') return redirect(url_for('show_artist', artist_id=artist.id)) return render_template('forms/new_artist.html', form=form)