def validate_url(url): """ Validates a url Returns True if valid and False if invalid """ url_re = URL().regex result = url_re.match(url) if result is None: return False else: return result.string
class VenueForm(Form): name = StringField( 'name', validators=[DataRequired()] ) city = StringField( 'city', validators=[DataRequired()] ) state = SelectField( 'state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ] ) address = StringField( 'address', validators=[DataRequired()] ) phone = StringField( 'phone' ) image_link = StringField( 'image_link' ) genres = SelectField( # TODO implement enum restriction 'genres', validators=[DataRequired()], choices=[ ('Alternative', 'Alternative'), ('Blues', 'Blues'), ('Classical', 'Classical'), ('Country', 'Country'), ('Electronic', 'Electronic'), ('Folk', 'Folk'), ('Funk', 'Funk'), ('Hip-Hop', 'Hip-Hop'), ('Heavy Metal', 'Heavy Metal'), ('Instrumental', 'Instrumental'), ('Jazz', 'Jazz'), ('Musical Theatre', 'Musical Theatre'), ('Pop', 'Pop'), ('Punk', 'Punk'), ('R&B', 'R&B'), ('Reggae', 'Reggae'), ('Rock n Roll', 'Rock n Roll'), ('Soul', 'Soul'), ('Other', 'Other'), ] ) seeking_talent = BooleanField( 'name' ) seeking_description = StringField( 'Seaking description', validators=[DataRequired()] ) website = StringField( 'website', validators=[DataRequired()] ) facebook_link = StringField( 'facebook_link', validators=[URL()] )
class ForumForm(FlaskForm): title = StringField( _("Forum title"), validators=[DataRequired(message=_("Please enter a forum title."))] ) description = TextAreaField( _("Description"), validators=[Optional()], description=_("You can format your description with Markdown.") ) position = IntegerField( _("Position"), default=1, validators=[DataRequired(message=_("Please enter a position for the" "forum."))] ) category = QuerySelectField( _("Category"), query_factory=selectable_categories, allow_blank=False, get_label="title", description=_("The category that contains this forum.") ) external = StringField( _("External link"), validators=[Optional(), URL()], description=_("A link to a website i.e. 'http://flaskbb.org'.") ) moderators = StringField( _("Moderators"), description=_("Comma separated usernames. Leave it blank if you do " "not want to set any moderators.") ) show_moderators = BooleanField( _("Show moderators"), description=_("Do you want to show the moderators on the index page?") ) locked = BooleanField( _("Locked?"), description=_("Disable new posts and topics in this forum.") ) groups = QuerySelectMultipleField( _("Group access"), query_factory=selectable_groups, get_label="name", description=_("Select the groups that can access this forum.") ) submit = SubmitField(_("Save")) def validate_external(self, field): if hasattr(self, "forum"): if self.forum.topics.count() > 0: raise ValidationError(_("You cannot convert a forum that " "contains topics into an " "external link.")) def validate_show_moderators(self, field): if field.data and not self.moderators.data: raise ValidationError(_("You also need to specify some " "moderators.")) def validate_moderators(self, field): approved_moderators = [] if field.data: moderators = [mod.strip() for mod in field.data.split(',')] users = User.query.filter(User.username.in_(moderators)) for user in users: if not Permission(IsAtleastModerator, identity=user): raise ValidationError( _("%(user)s is not in a moderators group.", user=user.username) ) else: approved_moderators.append(user) field.data = approved_moderators def save(self): data = self.data # delete submit and csrf_token from data data.pop('submit', None) data.pop('csrf_token', None) forum = Forum(**data) return forum.save()
class PlaylistForm(FlaskForm): """Form to create a Playlist.""" name = StringField('Playlist Name', validators=[DataRequired(), Length(min=3, max=80)]) photo_url = StringField('Photo', validators=[URL()]) submit = SubmitField('Submit')
class _PostForm(Form): name = StringField(u'电影名', validators=[DataRequired(), Length(1, 50)]) private = SelectField(u'是否公开', choices=[(0, u'所有人可见'), (1, u'仅自己可见')], coerce=int) reference = StringField(u'豆瓣链接', validators=[Length(0, 80), URL()]) method = SelectField(u'上传方式', choices=[(u'file', u'本地图片'), (u'url', u'网络图片')], validators=[Regexp(u'^file|url$')]) img_file = FileField(u'海报图片') img_url = StringField(u'海报URL', validators=[]) o_name = StringField(u'原名', validators=[Length(0, 50)]) alias = StringField(u'别名', validators=[Length(0, 160)]) director = StringField(u'导演', validators=[Length(0, 40)]) screenwriter = StringField(u'编剧', validators=[Length(0, 40)]) performers = StringField(u'主演', validators=[Length(0, 200)]) category = SelectField(u'分类', coerce=int) country = StringField(u'地区', validators=[Length(0, 100)]) length = StringField(u'片长', validators=[Length(0, 60)]) release_date = StringField(u'上映日期', validators=[Length(0, 60)]) introduction = TextAreaField(u'电影简介') submit = SubmitField(u'提交') def __init__(self, *args, **kwargs): super(_PostForm, self).__init__(*args, **kwargs) self.category.choices = [ (c.id, c.name) for c in Category.query.filter_by(disabled=False).all() ] def from_post(self, post): if self.method.data is None: self.method.data = u'file' self.name.data = post.name self.private.data = 1 if post.private else 0 self.o_name.data = post.o_name self.alias.data = post.alias self.director.data = post.director self.screenwriter.data = post.screenwriter self.performers.data = post.performers self.category.data = post.category_id self.country.data = post.country self.length.data = post.length self.release_date.data = post.release_date self.reference.data = post.reference self.introduction.data = post.introduction return self def to_post(self, post): post.name = self.name.data post.private = True if self.private.data else False post.o_name = self.o_name.data post.alias = self.alias.data post.director = self.director.data post.screenwriter = self.screenwriter.data post.performers = self.performers.data post.category_id = self.category.data post.country = self.country.data post.length = self.length.data post.release_date = self.release_date.data post.reference = self.reference.data post.introduction = self.introduction.data return post
class ImageForm(FlaskForm): image = FileField(validators=[Optional()]) url = TextField('URL', validators=[Optional(), URL()]) submit = SubmitField('Submit')
class EditPetForm(FlaskForm): """Form for editing pets""" photo_url = StringField("Image URL", validators=[Optional(), URL()]) notes = TextAreaField("Comments", validators=[Optional(), Length(min=5)]) available = BooleanField("Available?")
class VenueForm(Form): name = StringField('name', validators=[DataRequired()], render_kw={'autofocus': True}) city = StringField('city', validators=[DataRequired(), Length(max=120)]) state = SelectField('state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ]) address = StringField('address', validators=[DataRequired(), Length(max=120)]) phone = StringField('phone', validators=[ Optional(), Regexp(regex=r'^[0-9]{3}-[0-9]{3}-[0-9]{4}$', message='Invalid phone number') ]) genres = SelectMultipleField( # TODO implement enum restriction 'genres', validators=[DataRequired()], choices=[ ('Alternative', 'Alternative'), ('Blues', 'Blues'), ('Classical', 'Classical'), ('Country', 'Country'), ('Electronic', 'Electronic'), ('Folk', 'Folk'), ('Funk', 'Funk'), ('Hip-Hop', 'Hip-Hop'), ('Heavy Metal', 'Heavy Metal'), ('Instrumental', 'Instrumental'), ('Jazz', 'Jazz'), ('Musical Theatre', 'Musical Theatre'), ('Pop', 'Pop'), ('Punk', 'Punk'), ('R&B', 'R&B'), ('Reggae', 'Reggae'), ('Rock n Roll', 'Rock n Roll'), ('Soul', 'Soul'), ('Other', 'Other'), ]) image_link = StringField('image_link', validators=[Optional(), Length(max=500), URL()]) facebook_link = StringField( 'facebook_link', validators=[Optional(), Length(max=120), URL()]) website = StringField('website', validators=[Optional(), Length(max=120), URL()]) seeking_talent = BooleanField('seeking_talent', default=False, false_values={False, 'false', ''}) seeking_description = TextAreaField('seeking_description', validators=[Length(max=500)])
class UpdateBannerForm(Form): cover_url = StringField(validators=[Optional(), URL()]) link_url = StringField(validators=[URL(), Optional()])
class CreateBannerForm(Form): cover_url = StringField(validators=[DataRequired(), URL()]) link_url = StringField(validators=[URL(), Optional()])
class UpdateAdForm(Form): des = StringField(validators=[Length(max=190), Optional()]) cover_url = StringField(validators=[URL(), Optional()]) link_url = StringField(validators=[URL(), Optional()])
class VenueForm(Form): name = StringField('name', validators=[DataRequired()]) city = StringField('city', validators=[DataRequired()]) state = SelectField('state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ]) address = StringField('address', validators=[DataRequired()]) phone = StringField('phone') image_link = StringField('image_link') genres = SelectMultipleField('genres', validators=[DataRequired()], choices=get_genre(Genre)) facebook_link = StringField('facebook_link', validators=[URL()]) is_seeking_talent = BooleanField('Currently seeking talent?')
class ArtistForm(Form): name = StringField('name', validators=[DataRequired()]) city = StringField('city', validators=[DataRequired()]) state = SelectField('state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ]) phone = StringField( 'phone', validators=[ DataRequired(), Regexp('^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$', message='phone is not in the correct format: ' + 'xxx-xxx-xxxx') ]) image_link = StringField('image_link') genres = SelectMultipleField('genres', validators=[DataRequired()], choices=get_genre(Genre)) facebook_link = StringField('facebook_link', validators=[URL()])
class UrlForm(Form): submission_url = StringField('submission_url', validators=[URL()]) description = StringField('description', validators=[DataRequired()])
class WorkerCreateForm(Form): name = StringField() source = StringField(validators=[URL()]) interval = IntegerField()
class VenueForm(FlaskForm): name = StringField('name', validators=[DataRequired()]) city = StringField('city', validators=[DataRequired()]) state = SelectField('state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ('MP', 'MP'), ('GZ', 'GZ'), ('IN', 'IN'), ('MN', 'MN'), ('SF', 'SF'), ('TE', 'TE'), ('ZA', 'ZA'), ('NP', 'NP'), ('NI', 'NI'), ('CD', 'CD'), ]) address = StringField('address', validators=[DataRequired()]) phone = StringField('phone') image_link = StringField('image_link') genres = SelectMultipleField( # TODO implement enum restriction 'genres', validators=[ DataRequired(), Length(min=1, max=5, message="A maximum of 5 genres is accepted!") ], choices=[ ('Alternative', 'Alternative'), ('Blues', 'Blues'), ('Classical', 'Classical'), ('Country', 'Country'), ('Electronic', 'Electronic'), ('Folk', 'Folk'), ('Funk', 'Funk'), ('Hip-Hop', 'Hip-Hop'), ('Heavy Metal', 'Heavy Metal'), ('Instrumental', 'Instrumental'), ('Jazz', 'Jazz'), ('Musical Theatre', 'Musical Theatre'), ('Pop', 'Pop'), ('Punk', 'Punk'), ('R&B', 'R&B'), ('Reggae', 'Reggae'), ('Rock n Roll', 'Rock n Roll'), ('Soul', 'Soul'), ('Other', 'Other'), ]) facebook_link = StringField('facebook_link', validators=[URL()])
class ProfileForm(FlaskForm): nickname = StringField('Nickname', validators=[DataRequired(), Length(1, 64)]) github = StringField('GitHub', validators=[Optional(), URL(), Length(0, 128)]) website = StringField('Website', validators=[Optional(), URL(), Length(0, 128)]) bio = TextAreaField('Bio', validators=[Optional(), Length(0, 120)])
class UrlForm(FlaskForm): url = StringField('Url', validators=[DataRequired(), URL()]) submit = SubmitField('Submit')
class EditPetForm(FlaskForm): photo_url = StringField("Pet Photo", validators=[Optional(), URL()]) notes = StringField("Notes", validators=[Optional()]) available = BooleanField("Available for Adoption", validators=[Optional()])
class ArtistForm(Form): name = StringField( 'name', validators=[DataRequired()] ) city = StringField( 'city', validators=[DataRequired()] ) state = SelectField( 'state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ] ) phone = StringField( # TODO implement validation logic for state 'phone', validators=[Regexp(r'^[0-9\-\+]+$', message='Enter a valid phone please'), DataRequired()] ) image_link = StringField( 'image_link' ) genres = SelectMultipleField( # TODO implement enum restriction 'genres', validators=[DataRequired()], choices=[ ('Alternative', 'Alternative'), ('Blues', 'Blues'), ('Classical', 'Classical'), ('Country', 'Country'), ('Electronic', 'Electronic'), ('Folk', 'Folk'), ('Funk', 'Funk'), ('Hip-Hop', 'Hip-Hop'), ('Heavy Metal', 'Heavy Metal'), ('Instrumental', 'Instrumental'), ('Jazz', 'Jazz'), ('Musical Theatre', 'Musical Theatre'), ('Pop', 'Pop'), ('Punk', 'Punk'), ('R&B', 'R&B'), ('Reggae', 'Reggae'), ('Rock n Roll', 'Rock n Roll'), ('Soul', 'Soul'), ('Other', 'Other'), ] ) facebook_link = URLField( 'facebook_link', validators=[DataRequired(message='Enter URL Please'), URL(message='Enter Valid URL Please.')] ) seeking_venue = SelectField( 'seeking_venue', validators=[DataRequired()], choices=[ ('True', 'True'), ('', 'False') ] ) seeking_description = StringField( 'seeking_description' ) website = URLField( 'website', validators=[Optional(), URL(message='Enter Valid URL Please.')] )
class ArtistForm(Form): name = StringField("name", validators=[DataRequired()]) city = StringField("city", validators=[DataRequired()]) state = SelectField( "state", validators=[DataRequired()], choices=[ ("AL", "AL"), ("AK", "AK"), ("AZ", "AZ"), ("AR", "AR"), ("CA", "CA"), ("CO", "CO"), ("CT", "CT"), ("DE", "DE"), ("DC", "DC"), ("FL", "FL"), ("GA", "GA"), ("HI", "HI"), ("ID", "ID"), ("IL", "IL"), ("IN", "IN"), ("IA", "IA"), ("KS", "KS"), ("KY", "KY"), ("LA", "LA"), ("ME", "ME"), ("MT", "MT"), ("NE", "NE"), ("NV", "NV"), ("NH", "NH"), ("NJ", "NJ"), ("NM", "NM"), ("NY", "NY"), ("NC", "NC"), ("ND", "ND"), ("OH", "OH"), ("OK", "OK"), ("OR", "OR"), ("MD", "MD"), ("MA", "MA"), ("MI", "MI"), ("MN", "MN"), ("MS", "MS"), ("MO", "MO"), ("PA", "PA"), ("RI", "RI"), ("SC", "SC"), ("SD", "SD"), ("TN", "TN"), ("TX", "TX"), ("UT", "UT"), ("VT", "VT"), ("VA", "VA"), ("WA", "WA"), ("WV", "WV"), ("WI", "WI"), ("WY", "WY"), ], ) phone = StringField( # TODO implement validation logic for state "phone" ) image_link = StringField("image_link") genres = SelectMultipleField( # TODO implement enum restriction "genres", validators=[DataRequired()], choices=[(genre.value, genre.value) for genre in Genres], ) facebook_link = StringField("facebook_link", validators=[URL()]) website = StringField("website", validators=[URL()]) seeking_venue = BooleanField("seeking_venue") seeking_description = StringField("seeking_description")
class OpenIDForm(FlaskForm): 'Form for OpenID users' openid = StringField('OpenID Url', [DataRequired(), URL()])
class LinkForm(FlaskForm): name = StringField('Name', validators=[DataRequired(), Length(1, 30)]) url = StringField('URL', validators=[DataRequired(), URL(), Length(1, 255)]) submit = SubmitField()
class CreatePostForm(FlaskForm): title = StringField("Blog Post Title", validators=[DataRequired()]) subtitle = StringField("Subtitle", validators=[DataRequired()]) img_url = StringField("Blog Image URL", validators=[DataRequired(), URL()]) body = CKEditorField("Blog Content", validators=[DataRequired()]) submit = SubmitField("Submit Post")
class OpenIDForm(FlaskForm): openid = StringField('OpenID URL', validators=[DataRequired(), URL()])
class EditPetForm(FlaskForm): """Form for editing a pet""" photo_url = StringField('Photo URL', validators=[Optional(), URL()]) notes = StringField('Notes', validators=[Optional(), Length(min=10)]) available = BooleanField('Available')
class VenueForm(Form): def validate_phone(form, field): if len(field.data) > 16: raise ValidationError('Invalid phone number.') try: input_number = phonenumbers.parse(field.data) if not (phonenumbers.is_valid_number(input_number)): raise ValidationError('Invalid phone number.') except: input_number = phonenumbers.parse("+1" + field.data) if not (phonenumbers.is_valid_number(input_number)): raise ValidationError('Invalid phone number.') name = StringField('name', validators=[DataRequired()]) city = StringField('city', validators=[DataRequired()]) state = SelectField('state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ]) address = StringField('address', validators=[DataRequired()]) phone = StringField('phone', validators=[DataRequired(), validate_phone]) image_link = StringField('image_link') genres = SelectMultipleField( # TODO implement enum restriction 'genres', validators=[DataRequired()], choices=[ ('Alternative', 'Alternative'), ('Blues', 'Blues'), ('Classical', 'Classical'), ('Country', 'Country'), ('Electronic', 'Electronic'), ('Folk', 'Folk'), ('Funk', 'Funk'), ('Hip-Hop', 'Hip-Hop'), ('Heavy Metal', 'Heavy Metal'), ('Instrumental', 'Instrumental'), ('Jazz', 'Jazz'), ('Musical Theatre', 'Musical Theatre'), ('Pop', 'Pop'), ('Punk', 'Punk'), ('R&B', 'R&B'), ('Reggae', 'Reggae'), ('Rock n Roll', 'Rock n Roll'), ('Soul', 'Soul'), ('Other', 'Other'), ]) facebook_link = StringField('facebook_link', validators=[URL()]) website = StringField('website', validators=[URL()]) seeking_talent = BooleanField(False) seeking_description = StringField('seeking_description')
class UserForm(FlaskForm): username = StringField(_("Username"), validators=[ DataRequired(message=_("A valid username is required.")), is_username]) email = StringField(_("Email address"), validators=[ DataRequired(message=_("A valid email address is required.")), Email(message=_("Invalid email address."))]) password = PasswordField("Password", validators=[ DataRequired()]) birthday = DateField(_("Birthday"), format="%d %m %Y", validators=[ Optional()]) gender = StringField(_("Gender"), validators=[Optional()]) location = StringField(_("Location"), validators=[ Optional()]) website = StringField(_("Website"), validators=[ Optional(), URL()]) avatar = StringField(_("Avatar"), validators=[ Optional(), URL()]) signature = TextAreaField(_("Forum signature"), validators=[ Optional()]) notes = TextAreaField(_("Notes"), validators=[ Optional(), Length(min=0, max=5000)]) activated = BooleanField(_("Is active?"), validators=[ Optional()]) primary_group = QuerySelectField( _("Primary group"), query_factory=select_primary_group, get_label="name") secondary_groups = QuerySelectMultipleField( _("Secondary groups"), # TODO: Template rendering errors "NoneType is not callable" # without this, figure out why. query_factory=select_primary_group, get_label="name") submit = SubmitField(_("Save")) def validate_username(self, field): if hasattr(self, "user"): user = User.query.filter( db.and_( User.username.like(field.data.lower()), db.not_(User.id == self.user.id) ) ).first() else: user = User.query.filter( User.username.like(field.data.lower()) ).first() if user: raise ValidationError(_("This username is already taken.")) def validate_email(self, field): if hasattr(self, "user"): user = User.query.filter( db.and_( User.email.like(field.data.lower()), db.not_(User.id == self.user.id) ) ).first() else: user = User.query.filter( User.email.like(field.data.lower()) ).first() if user: raise ValidationError(_("This email address is already taken.")) def validate_avatar(self, field): if field.data is not None: error, status = check_image(field.data) if error is not None: raise ValidationError(error) return status def save(self): data = self.data data.pop('submit', None) data.pop('csrf_token', None) user = User(**data) return user.save()
class ArtistForm(FlaskForm): name = StringField( 'name', validators=[InputRequired()] ) city = StringField( 'city', validators=[InputRequired()] ) state = SelectField( 'state', validators=[InputRequired(), AnyOf(STATES)], choices=STATE_CHOICES ) phone = StringField( 'phone', validators=[InputRequired(), validate_phone], ) website = StringField( 'website', validators=[Optional(), URL()] ) image_link = StringField( 'image_link', validators=[Optional(), URL()] ) # choices & validators need to be set dynamically in controller genres = SelectMultipleField( 'genres', validators=[InputRequired()], choices=[] ) facebook_link = StringField( 'facebook_link', validators=[Optional(), URL()] ) seeking_venue = BooleanField( 'seeking_venue' ) seeking_description = TextAreaField( 'seeking_description', validators=[Optional()] ) from_date = DateTimeField( 'From time', validators=[InputRequired(), ValidateDateTime(min_dt=ValidateDateTime.FIELD_DEFAULT, dt_format=AVAILABILITY_FROM_DATE_FMT)], format=AVAILABILITY_FROM_DATE_FMT, default=current_datetime() ) mon_from = AppTimeField( 'Monday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) mon_to = AppTimeField( 'Monday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) tue_from = AppTimeField( 'Tuesday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) tue_to = AppTimeField( 'Tuesday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) wed_from = AppTimeField( 'Wednesday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) wed_to = AppTimeField( 'Wednesday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) thu_from = AppTimeField( 'Thursday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) thu_to = AppTimeField( 'Thursday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) fri_from = AppTimeField( 'Friday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) fri_to = AppTimeField( 'Friday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) sat_from = AppTimeField( 'Saturday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) sat_to = AppTimeField( 'Saturday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) sun_from = AppTimeField( 'Sunday start', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) sun_to = AppTimeField( 'Sunday end', validators=[Optional()], format=AVAILABILITY_TIME_FMT, ) def validate_mon_from(self, field): validate_from_to_fields(field, self.mon_to) def validate_tue_from(self, field): validate_from_to_fields(field, self.tue_to) def validate_wed_from(self, field): validate_from_to_fields(field, self.wed_to) def validate_thu_from(self, field): validate_from_to_fields(field, self.thu_to) def validate_fri_from(self, field): validate_from_to_fields(field, self.fri_to) def validate_sat_from(self, field): validate_from_to_fields(field, self.sat_to) def validate_sun_from(self, field): validate_from_to_fields(field, self.sun_to)
class ArtistForm(Form): name = StringField('name', validators=[DataRequired()]) city = StringField('city', validators=[DataRequired()]) state = SelectField('state', validators=[DataRequired()], choices=[ ('AL', 'AL'), ('AK', 'AK'), ('AZ', 'AZ'), ('AR', 'AR'), ('CA', 'CA'), ('CO', 'CO'), ('CT', 'CT'), ('DE', 'DE'), ('DC', 'DC'), ('FL', 'FL'), ('GA', 'GA'), ('HI', 'HI'), ('ID', 'ID'), ('IL', 'IL'), ('IN', 'IN'), ('IA', 'IA'), ('KS', 'KS'), ('KY', 'KY'), ('LA', 'LA'), ('ME', 'ME'), ('MT', 'MT'), ('NE', 'NE'), ('NV', 'NV'), ('NH', 'NH'), ('NJ', 'NJ'), ('NM', 'NM'), ('NY', 'NY'), ('NC', 'NC'), ('ND', 'ND'), ('OH', 'OH'), ('OK', 'OK'), ('OR', 'OR'), ('MD', 'MD'), ('MA', 'MA'), ('MI', 'MI'), ('MN', 'MN'), ('MS', 'MS'), ('MO', 'MO'), ('PA', 'PA'), ('RI', 'RI'), ('SC', 'SC'), ('SD', 'SD'), ('TN', 'TN'), ('TX', 'TX'), ('UT', 'UT'), ('VT', 'VT'), ('VA', 'VA'), ('WA', 'WA'), ('WV', 'WV'), ('WI', 'WI'), ('WY', 'WY'), ]) phone = StringField('phone', validators=[DataRequired()]) image_link = StringField('image_link') genres = SelectMultipleField('genres', validators=[DataRequired()], choices=[ ('Alternative', 'Alternative'), ('Blues', 'Blues'), ('Classical', 'Classical'), ('Country', 'Country'), ('Electronic', 'Electronic'), ('Folk', 'Folk'), ('Funk', 'Funk'), ('Hip-Hop', 'Hip-Hop'), ('Heavy Metal', 'Heavy Metal'), ('Instrumental', 'Instrumental'), ('Jazz', 'Jazz'), ('Musical Theatre', 'Musical Theatre'), ('Pop', 'Pop'), ('Punk', 'Punk'), ('R&B', 'R&B'), ('Reggae', 'Reggae'), ('Rock n Roll', 'Rock n Roll'), ('Soul', 'Soul'), ('Other', 'Other'), ]) facebook_link = StringField('facebook_link', validators=[URL()]) website = StringField('website', validators=[URL()]) seeking_venue = SelectField('seeking_venue', validators=[DataRequired()], choices=[('Yes', 'Yes'), ('No', 'No')]) seeking_description = StringField('seeking_description') def validate_genres(self, genres): genre_choices = GenreEnum.choices() for genre in genres.data: if genre not in genre_choices: raise ValidationError('This is not an available genre')
class VenueForm(Form): name = StringField("name", validators=[DataRequired()]) city = StringField("city", validators=[DataRequired()]) state = SelectField( "state", validators=[DataRequired()], choices=[ ("AL", "AL"), ("AK", "AK"), ("AZ", "AZ"), ("AR", "AR"), ("CA", "CA"), ("CO", "CO"), ("CT", "CT"), ("DE", "DE"), ("DC", "DC"), ("FL", "FL"), ("GA", "GA"), ("HI", "HI"), ("ID", "ID"), ("IL", "IL"), ("IN", "IN"), ("IA", "IA"), ("KS", "KS"), ("KY", "KY"), ("LA", "LA"), ("ME", "ME"), ("MT", "MT"), ("NE", "NE"), ("NV", "NV"), ("NH", "NH"), ("NJ", "NJ"), ("NM", "NM"), ("NY", "NY"), ("NC", "NC"), ("ND", "ND"), ("OH", "OH"), ("OK", "OK"), ("OR", "OR"), ("MD", "MD"), ("MA", "MA"), ("MI", "MI"), ("MN", "MN"), ("MS", "MS"), ("MO", "MO"), ("PA", "PA"), ("RI", "RI"), ("SC", "SC"), ("SD", "SD"), ("TN", "TN"), ("TX", "TX"), ("UT", "UT"), ("VT", "VT"), ("VA", "VA"), ("WA", "WA"), ("WV", "WV"), ("WI", "WI"), ("WY", "WY"), ], ) address = StringField("address", validators=[DataRequired()]) phone = StringField("phone") image_link = StringField("image_link") facebook_link = StringField("facebook_link", validators=[URL()]) seeking_talent = BooleanField("seeking_talent") seeking_description = StringField("seeking_description") website = StringField("website", validators=[URL()]) genres = build_genres(choices)