Пример #1
0
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
Пример #2
0
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()]
    )
Пример #3
0
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()
Пример #4
0
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')
Пример #5
0
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')
Пример #7
0
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?")
Пример #8
0
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)])
Пример #9
0
class UpdateBannerForm(Form):
    cover_url = StringField(validators=[Optional(), URL()])
    link_url = StringField(validators=[URL(), Optional()])
Пример #10
0
class CreateBannerForm(Form):
    cover_url = StringField(validators=[DataRequired(), URL()])
    link_url = StringField(validators=[URL(), Optional()])
Пример #11
0
class UpdateAdForm(Form):
    des = StringField(validators=[Length(max=190), Optional()])
    cover_url = StringField(validators=[URL(), Optional()])
    link_url = StringField(validators=[URL(), Optional()])
Пример #12
0
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?')
Пример #13
0
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()])
Пример #14
0
class UrlForm(Form):
    submission_url = StringField('submission_url', validators=[URL()])
    description = StringField('description', validators=[DataRequired()])
Пример #15
0
class WorkerCreateForm(Form):
    name = StringField()
    source = StringField(validators=[URL()])
    interval = IntegerField()
Пример #16
0
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()])
Пример #17
0
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)])
Пример #18
0
class UrlForm(FlaskForm):
    url = StringField('Url', validators=[DataRequired(), URL()])
    submit = SubmitField('Submit')
Пример #19
0
class EditPetForm(FlaskForm):
    photo_url = StringField("Pet Photo", validators=[Optional(), URL()])
    notes = StringField("Notes", validators=[Optional()])
    available = BooleanField("Available for Adoption", validators=[Optional()])
Пример #20
0
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.')]
    )
Пример #21
0
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")
Пример #22
0
class OpenIDForm(FlaskForm):
    'Form for OpenID users'
    openid = StringField('OpenID Url', [DataRequired(), URL()])
Пример #23
0
class LinkForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired(), Length(1, 30)])
    url = StringField('URL',
                      validators=[DataRequired(),
                                  URL(), Length(1, 255)])
    submit = SubmitField()
Пример #24
0
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")
Пример #25
0
class OpenIDForm(FlaskForm):
    openid = StringField('OpenID URL', validators=[DataRequired(), URL()])
Пример #26
0
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')
Пример #27
0
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')
Пример #28
0
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()
Пример #29
0
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)
Пример #30
0
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')
Пример #31
0
    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)