Exemplo n.º 1
0
class ReservationForm(FlaskForm):
    checkbox = BooleanField('Agree?',)
    resFrom = DateField('Date', validators=[DataRequired()], format= "%Y-%m-%d")
    reseFrom = TimeField('From', format= "%H:%M",validators=[TimeRange(
            min=time(7,30),
            max=time(17,00)
        ), DataRequired()])
    # reseFrom = StringField('Time')
    resTo = TimeField('To', format="%H:%M",validators=[TimeRange(
            min=time(7,30),
            max=time(19,00)
        ), DataRequired()])
    purpose = SelectField('Purpose',validators=[DataRequired()],
        choices = [('Academic','Academic'),('Organizational Event','Organizational Event')])
Exemplo n.º 2
0
 def test_assigns_min_and_max(self):
     form_class = self.init_form(
         validators=[TimeRange(min=time(12, 12), max=time(13, 30))])
     form = form_class(MultiDict(test_field='13:20'))
     assert str(form.test_field) == (
         '<input id="test_field" max="13:30:00" min="12:12:00"'
         ' name="test_field" type="time" value="13:20">')
Exemplo n.º 3
0
class ScreenModelView(MyModelView):
    column_list = ('id', 'movies', 'hallNum', 'time', 'price')
    form_columns = column_list[1:]
    form_edit_rules = column_list[2:]  # 可编辑的字段
    form_args = {
        'hallNum': {
            'validators': [
                validators.Regexp('[1-5]',
                                  message='hall number is between 1 and 5')
            ],
            'render_kw': {
                'placeholder': "放映厅, 1~5"
            }
        },
        'movies': {  # 已上映的未下架的电影可添加场次
            'query_factory':
            lambda: Movie.query.filter_by(expired=False).filter(
                Movie.playingTime < datetime.now())
        },
        'time': {
            'validators': [TimeRange(min=datetime.now())]
        }
    }

    def on_model_change(self, form, screen, is_created):
        if is_created:
            screen.id = UUID()

        movie = Movie.query.get(screen.movieId)
        if movie is None:
            raise ValidationError('movie does not exist')
        if movie.expired:
            raise ValidationError('movie is expired')

        time = form.time.data
        now = datetime.now()
        # 从4个小时前在同个放映厅的场次
        # 判断同个时间段是否有电影在上映
        fourh = now - timedelta(hours=4)
        screens = Screen.query.filter_by(hallNum=form.hallNum.data) \
                              .filter(Screen.time > fourh).all()
        endtime = time + timedelta(minutes=movie.duration)

        for s in screens:
            if s is screen:
                continue

            # 合法的场次要求
            # 开始时间比其他场次结束时间晚 或者 结束时间比其他场次开始时间早
            m = Movie.query.get(s.movieId)
            if time > (s.time + timedelta(minutes=m.duration))\
                    or endtime < s.time:
                continue

            raise ValidationError(
                '%r is playing in the same hall at this time' % movie)
Exemplo n.º 4
0
 def time_range(min=None, max=None):
     return TimeRange(min=min, max=max, message='Wrong time')
Exemplo n.º 5
0
 class ModelTestForm(Form):
     time = TimeField(validators=[TimeRange(**kwargs)])
Exemplo n.º 6
0
def add_timerange_validators(form, resource_id):
    resource = get_resource_by_id(resource_id)
    form.start_time.validators.append(TimeRange(min=resource.start_time))
    form.end_time.validators.append(TimeRange(max=resource.end_time))
    return form