예제 #1
0
 class EnrollmentForm(Form):
     study = ModelField(db_session=db_session,
                        class_=models.Study,
                        validators=[
                            wtforms.validators.InputRequired(),
                            check_cannot_edit_study
                        ])
     consent_date = DateField(validators=[
         wtforms.validators.InputRequired(),
         DateRange(
             min=date(1900, 1, 1)), check_unique, check_consent_timeline
     ])
     latest_consent_date = DateField(validators=[
         wtforms.validators.InputRequired(),
         DateRange(min=date(1900, 1, 1)), check_consent_timeline
     ])
     termination_date = DateField(validators=[
         wtforms.validators.Optional(),
         DateRange(min=date(1900, 1, 1)), check_termination_timeline
     ])
     reference_number = wtforms.StringField(
         validators=[wtforms.validators.Optional(), check_reference])
예제 #2
0
파일: forms.py 프로젝트: mqk/DelayMeNot
class LookingForFlightForm(Form):

    airport_dict_name, _, _ = mu.read_airport_dict()
    airports = ['%s - %s' % (v, k) for k, v in airport_dict_name.iteritems()]
    airport_values = airport_dict_name.keys() + airport_dict_name.values(
    ) + airports
    airport_validator = AnyOf(
        airport_values, message=u'Invalid input, must be an airport name.')

    date = DateField('Date', validators=[Required(), date_after_today])
    origin = TextField('Origin', validators=[Required(), airport_validator])
    destination = TextField('Destination',
                            validators=[Required(), airport_validator])
예제 #3
0
파일: forms.py 프로젝트: kdriver/thmr
class SurgeryForm(FlaskForm):
    cepod = SelectField('CEPOD',
                        choices=choice_for_enum(Cepod, include_blank=False),
                        coerce=coerce_for_enum(Cepod))

    date_of_discharge = DateField('Date')
    side = SelectField('Side',
                       choices=choice_for_enum(Side, include_blank=False),
                       coerce=coerce_for_enum(Side))
    primary = BooleanField('Primary?')
    type = SelectField('Type',
                       choices=choice_for_enum(Type, include_blank=False),
                       coerce=coerce_for_enum(Type))

    additional_procedure = TextAreaField('Additional Procedure')
    antibiotics = TextAreaField('Antibiotics')
    comments = TextAreaField('Comments')

    opd_rv_date = DateField('RV Date')
    opd_pain = StringField('Pain')
    opd_numbness = StringField('Numbness')
    opd_infection = StringField('Infection')
    opd_comments = TextAreaField('Comments')
예제 #4
0
    class SpecimenAliquotForm(wtforms.Form):
        """
        Similar form to Aliquot, except the fields are conditionally required
        if they are selected
        """

        ui_selected = wtforms.BooleanField()
        id = wtforms.IntegerField(widget=wtforms.widgets.HiddenInput())
        amount = wtforms.DecimalField(places=1,
                                      validators=[required_if('ui_selected')])
        collect_date = DateField(validators=[
            required_if('ui_selected'),
            DateRange(min=date(1900, 1, 1))
        ])
        collect_time = TimeField(validators=[required_if('ui_selected')])
        freezer = wtforms.StringField(
            validators=[wtforms.validators.optional()])
        rack = wtforms.StringField(validators=[wtforms.validators.optional()])
        box = wtforms.StringField(validators=[wtforms.validators.optional()])
        notes = wtforms.TextAreaField(
            validators=[wtforms.validators.optional()])

        count = wtforms.IntegerField(validators=[
            required_if('ui_selected'),
            wtforms.validators.optional()
        ])
        aliquot_type_id = wtforms.SelectField(
            coerce=int, validators=[required_if('ui_selected')])

        def __init__(self, *args, **kw):
            super(SpecimenAliquotForm, self).__init__(*args, **kw)

            specimen = None

            if 'obj' in kw:
                obj = kw['obj']
                if isinstance(obj, models.Specimen):
                    specimen = obj
                elif isinstance(obj, models.Aliquot):
                    specimen = obj.specimen
            elif 'specimen' in kw:
                specimen = kw['specimen']

            if specimen:
                self.aliquot_type_id.choices = [
                    (t.id, t.title)
                    for t in specimen.specimen_type.aliquot_types.values()
                ]
            else:
                self.aliquot_type_id.choices = []
예제 #5
0
class VCRoomListFilterForm(IndicoForm):
    direction = SelectField(_('Sort direction'), [DataRequired()],
                            choices=[('asc', _('Ascending')), ('desc', _('Descending'))])
    abs_start_date = DateField(_('Start Date'), [Optional(), Exclusive('rel_start_date')],
                               parse_kwargs={'dayfirst': True})
    abs_end_date = DateField(_('End Date'), [Optional(), Exclusive('rel_end_date')],
                             parse_kwargs={'dayfirst': True})
    rel_start_date = IntegerField(_('Days in the past'), [Optional(), Exclusive('abs_start_date'), NumberRange(min=0)],
                                  default=0)
    rel_end_date = IntegerField(_('Days in the future'), [Optional(), Exclusive('abs_end_date'), NumberRange(min=0)],
                                default=7)

    @generated_data
    def start_date(self):
        if self.abs_start_date.data is None and self.rel_start_date.data is None:
            return None
        return self.abs_start_date.data or (date.today() - timedelta(days=self.rel_start_date.data))

    @generated_data
    def end_date(self):
        if self.abs_end_date.data is None and self.rel_end_date.data is None:
            return None
        return self.abs_end_date.data or (date.today() + timedelta(days=self.rel_end_date.data))
예제 #6
0
class BookingSearchForm(IndicoForm):
    __generated_data__ = ('start_dt', 'end_dt')

    room_ids = SelectMultipleField('Rooms', [DataRequired()], coerce=int)

    start_date = DateField('Start Date', [InputRequired()],
                           parse_kwargs={'dayfirst': True})
    start_time = TimeField('Start Time', [InputRequired()])
    end_date = DateField('End Date', [InputRequired()],
                         parse_kwargs={'dayfirst': True})
    end_time = TimeField('End Time', [InputRequired()])

    booked_for_name = StringField('Booked For Name')
    reason = StringField('Reason')

    is_only_mine = BooleanField('Only Mine')
    is_only_my_rooms = BooleanField('Only My Rooms')
    is_only_confirmed_bookings = BooleanField('Only Confirmed Bookings')
    is_only_pending_bookings = BooleanField('Only Prebookings')

    is_rejected = BooleanField('Is Rejected')
    is_cancelled = BooleanField('Is Cancelled')
    is_archived = BooleanField('Is Archived')

    uses_vc = BooleanField('Uses Video Conference')
    needs_vc_assistance = BooleanField('Video Conference Setup Assistance')
    needs_assistance = BooleanField('General Assistance')

    @property
    def start_dt(self):
        return DataWrapper(
            datetime.combine(self.start_date.data, self.start_time.data))

    @property
    def end_dt(self):
        return DataWrapper(
            datetime.combine(self.end_date.data, self.end_time.data))
예제 #7
0
    class FilterForm(wtforms.Form):

        pid = wtforms.StringField(_(u'PID'),
                                  validators=[wtforms.validators.Optional()])

        aliquot_types = wtforms.SelectMultipleField(
            _(u'Aliquot Types'),
            choices=available_types,
            coerce=int,
            validators=[wtforms.validators.Optional()])

        aliquot_states = wtforms.SelectMultipleField(
            _(u'Aliquot States'),
            choices=available_states,
            coerce=int,
            validators=[wtforms.validators.Optional()])

        visit_cycles = wtforms.SelectMultipleField(
            _(u'Visit Cycles'),
            choices=available_cycles,
            coerce=int,
            validators=[wtforms.validators.Optional()])

        from_ = DateField(_(u'From Date'),
                          validators=[wtforms.validators.Optional()])

        to = DateField(_(u'To Date'),
                       validators=[wtforms.validators.Optional()])

        freezer = wtforms.StringField(
            _(u'Freezer'), validators=[wtforms.validators.Optional()])

        rack = wtforms.StringField(_(u'Rack'),
                                   validators=[wtforms.validators.Optional()])

        box = wtforms.StringField(_(u'Box'),
                                  validators=[wtforms.validators.Optional()])
예제 #8
0
    class FilterForm(wtforms.Form):

        pid = wtforms.StringField(
            _(u'PID'),
            validators=[wtforms.validators.Optional()])

        specimen_types = wtforms.SelectMultipleField(
            _(u'Specimen Types'),
            choices=available_types,
            coerce=int,
            validators=[wtforms.validators.Optional()])

        specimen_states = wtforms.SelectMultipleField(
            _(u'Specimen States'),
            choices=available_states,
            coerce=int,
            validators=[wtforms.validators.Optional()])

        visit_cycles = wtforms.SelectMultipleField(
            _(u'Visit Cycles'),
            choices=available_cycles,
            coerce=int,
            validators=[wtforms.validators.Optional()])

        from_ = DateField(
            _(u'From Date'),
            validators=[
                wtforms.validators.Optional(),
                DateRange(min=date(1900, 1, 1))
            ])

        to = DateField(
            _(u'To Date'),
            validators=[
                wtforms.validators.Optional(),
                DateRange(min=date(1900, 1, 1))
            ])
예제 #9
0
 class CheckoutForm(wtforms.Form):
     ui_selected = wtforms.BooleanField()
     id = wtforms.IntegerField(widget=wtforms.widgets.HiddenInput())
     location_id = wtforms.SelectField(
         choices=available_locations,
         coerce=int,
         validators=[wtforms.validators.DataRequired()])
     sent_date = DateField(validators=[
         wtforms.validators.Optional(),
         DateRange(min=date(1900, 1, 1))
     ])
     sent_name = wtforms.StringField(
         validators=[wtforms.validators.Optional()])
     sent_notes = wtforms.TextAreaField(
         validators=[wtforms.validators.Optional()])
예제 #10
0
 class VisitForm(Form):
     cycles = wtforms.FieldList(
         ModelField(
             db_session=db_session,
             class_=models.Cycle,
             validators=[
                 wtforms.validators.InputRequired(),
                 unique_cycle]),
         min_entries=1)
     visit_date = DateField(
         validators=[
             wtforms.validators.InputRequired(),
             unique_visit_date])
     include_forms = wtforms.BooleanField()
     include_specimen = wtforms.BooleanField()
예제 #11
0
class AttachmentPackageForm(IndicoForm):
    added_since = DateField(_('Added Since'), [Optional()], parse_kwargs={'dayfirst': True},
                            description=_('Include only attachments uploaded after this date'))

    filter_type = IndicoRadioField(_('Include'), [DataRequired()])

    sessions = IndicoSelectMultipleCheckboxField(_('Sessions'), [HiddenUnless('filter_type', 'sessions'),
                                                                 DataRequired()],
                                                 description=_('Include materials from selected sessions'))
    contributions = IndicoSelectMultipleCheckboxField(_('Contributions'),
                                                      [HiddenUnless('filter_type', 'contributions'), DataRequired()],
                                                      description=_('Include materials from selected contributions'))
    dates = IndicoSelectMultipleCheckboxField(_('Events scheduled on'), [HiddenUnless('filter_type', 'dates'),
                                                                         DataRequired()],
                                              description=_('Include materials from sessions/contributions scheduled '
                                                            'on the selected dates'))
예제 #12
0
 class AliquotForm(wtforms.Form):
     ui_selected = wtforms.BooleanField()
     id = wtforms.IntegerField(widget=wtforms.widgets.HiddenInput())
     amount = wtforms.DecimalField(places=1,
                                   validators=[conditionally_required])
     store_date = DateField(validators=[conditionally_required])
     freezer = wtforms.StringField(
         validators=[wtforms.validators.optional()])
     rack = wtforms.StringField(validators=[wtforms.validators.optional()])
     box = wtforms.StringField(validators=[wtforms.validators.optional()])
     special_instruction = wtforms.SelectField(
         choices=available_instructions,
         coerce=int,
         validators=[wtforms.validators.optional()])
     notes = wtforms.TextAreaField(
         validators=[wtforms.validators.optional()])
예제 #13
0
class editPostForm(FlaskForm):
    published = BooleanField('Published?')
    slug = StringField('Slug',
                       validators=[DataRequired(message='A slug is required')
                                   ])  # TODO: Validate Slug
    date = DateField('Date',
                     validators=[DataRequired(message='A date is required')])
    description = StringField('Short Description')
    category = SelectField('Category', coerce=int)  # TODO: Validate this field
    tags = StringField(
        'Tags', validators=[DataRequired(message='Please add at least 1 tag')])
    author = SelectField('Author', coerce=int)  # TODO: Validate this field
    image = FileField('Update Featured Image',
                      validators=[
                          FileAllowed(['png', 'jpg', 'jpeg', 'gif'],
                                      message='That file type is not allowed')
                      ])
예제 #14
0
 class AliquotForm(wtforms.Form):
     ui_selected = wtforms.BooleanField()
     id = wtforms.IntegerField(widget=wtforms.widgets.HiddenInput())
     amount = wtforms.DecimalField(
         places=1, validators=[wtforms.validators.required()])
     collect_date = DateField(validators=[
         wtforms.validators.required(),
         DateRange(min=date(1900, 1, 1))
     ])
     collect_time = TimeField(validators=[
         wtforms.validators.required(),
     ])
     freezer = wtforms.StringField(
         validators=[wtforms.validators.optional()])
     rack = wtforms.StringField(validators=[wtforms.validators.optional()])
     box = wtforms.StringField(validators=[wtforms.validators.optional()])
     notes = wtforms.TextAreaField(
         validators=[wtforms.validators.optional()])
예제 #15
0
 class CheckoutForm(wtforms.Form):
     location_id = wtforms.SelectField(
         _('Lab Location'),
         description=_('The location of the aliquot'),
         choices=available_locations,
         coerce=int,
         validators=[wtforms.validators.DataRequired()])
     sent_date = DateField(_(u'Sent Date'),
                           description=_(u'Date sent for analysis.'),
                           validators=[wtforms.validators.Optional()])
     sent_name = wtforms.StringField(
         _(u'Sent Name '),
         description=_(u'The name of the aliquot\'s receiver.'),
         validators=[wtforms.validators.Optional()])
     sent_notes = wtforms.TextAreaField(
         _(u'Sent Notes '),
         description=_(u'Notes about this aliquot\'s destination'),
         validators=[wtforms.validators.Optional()])
예제 #16
0
class createPostForm(FlaskForm):
    title = StringField('Title',
                        validators=[
                            DataRequired(message='The post must have a title'),
                            postTitleCheck
                        ])
    date = DateField('Date',
                     validators=[DataRequired(message='A date is required')])
    description = StringField('Short Description')
    category = SelectField('Category', coerce=int)  # TODO: Validate this field
    tags = StringField(
        'Tags', validators=[DataRequired(message='Please add at least 1 tag')])
    image = FileField(
        'Featured Image',
        validators=[
            FileRequired(message='Please provide a featured image'),
            FileAllowed(['png', 'jpg', 'jpeg', 'gif'],
                        message='That file type is not allowed')
        ])
예제 #17
0
파일: forms.py 프로젝트: mqk/DelayMeNot
class AlreadyHaveAFlightForm(Form):

    carrier_dict_name, _ = mu.read_carrier_dict()
    carriers = ['%s - %s' % (v, k) for k, v in carrier_dict_name.iteritems()]
    carrier_values = carrier_dict_name.keys() + carrier_dict_name.values(
    ) + carriers
    carrier_validator = AnyOf(
        carrier_values, message=u'Invalid input, must be a carrier name.')

    date = DateField('Date', validators=[Required(), date_after_today])
    carrier = TextField('Carrier', validators=[Required(), carrier_validator])
    flightnumber = IntegerField(
        'FlightNumber',
        validators=[
            Required(
                message=u'This field is required, and must be an integer.'),
            NumberRange(min=1,
                        message=u'Invalid input, must be greater than zero.')
        ])
예제 #18
0
 class StudyForm(Form):
     title = wtforms.StringField(validators=[
         wtforms.validators.InputRequired(),
         wtforms.validators.Length(min=1, max=32), check_unique_url
     ])
     code = wtforms.StringField(validators=[
         wtforms.validators.InputRequired(),
         wtforms.validators.Length(min=1, max=8)
     ])
     short_title = wtforms.StringField(validators=[
         wtforms.validators.InputRequired(),
         wtforms.validators.Length(min=1, max=8)
     ])
     consent_date = DateField()
     termination_form = ModelField(db_session=db_session,
                                   class_=datastore.Schema,
                                   validators=[
                                       wtforms.validators.Optional(),
                                       check_has_termination_date
                                   ])
     is_randomized = wtforms.BooleanField()
     is_blinded = wtforms.BooleanField()
     randomzation_form = ModelField(db_session=db_session,
                                    class_=datastore.Schema)
예제 #19
0
class HistoryDateForm(Form):
    # Due to request context issues, cannot access the user's timezone
    default_date = datetime.now(None).today()
    start_date = DateField("Start Date", default=default_date)
    end_date = DateField("End Date", default=default_date)
예제 #20
0
파일: forms.py 프로젝트: zvada/topology
class GenerateDowntimeForm(FlaskForm):
    scheduled = SelectField(
        "Scheduled (registered at least 24 hours in advance)",
        [InputRequired()],
        choices=[
            ("", "-- Select one --"),
            ("SCHEDULED", "Yes"),
            ("UNSCHEDULED", "No"),
        ])
    severity = SelectField(
        "Severity (how much of the resource is affected)", [InputRequired()],
        choices=[("", "-- Select one --"),
                 ("Outage", "Outage (completely inaccessible)"),
                 ("Severe", "Severe (most services down)"),
                 ("Intermittent Outage",
                  "Intermittent Outage (may be up for some of the time)"),
                 ("No Significant Outage Expected",
                  "No Significant Outage Expected (you shouldn't notice)")])
    description = StringField(
        "Description (the reason and/or impact of the outage)",
        [InputRequired()])

    start_date = DateField("Start Date/Time (UTC)", [InputRequired()])
    start_time = TimeField(" ", [InputRequired()])
    end_date = DateField("End Date/Time (UTC)", [InputRequired()])
    end_time = TimeField(" ", [InputRequired()])
    services = SelectMultipleField("Known OSG Services (select one or more)",
                                   [InputRequired()],
                                   choices=[])

    facility = SelectField("Facility", choices=[])
    change_facility = SubmitField()
    resource = SelectField("Resource", choices=[])
    change_resource = SubmitField()

    generate = SubmitField()

    yamloutput = TextAreaField(None,
                               render_kw={
                                   "readonly": True,
                                   "style":
                                   "font-family:monospace; font-size:small;",
                                   "rows": "15"
                               })

    class Meta:
        csrf = False  # CSRF not needed because no data gets modified

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.infos = ""

    # https://stackoverflow.com/a/21815180
    def validate(self):
        self.infos = ""

        if not super().validate():
            return False
        if self.start_date.data > self.end_date.data:
            self.end_date.errors.append(
                "End date/time must be after start date/time")
            return False
        elif self.start_date.data == self.end_date.data:
            if self.start_time.data >= self.end_time.data:
                self.end_time.errors.append(
                    "End date/time must be after start date/time")
                return False

        days_in_future = (self.get_start_datetime() -
                          datetime.datetime.utcnow()).days
        if days_in_future < 1 and self.scheduled.data == "SCHEDULED":
            self.infos += "Note: Downtime registered less than one day in advance " \
                             "is considered unscheduled by WLCG policy."
        elif days_in_future >= 1 and self.scheduled.data == "UNSCHEDULED":
            self.infos += "Note: Downtime registered at least one day in advance " \
                             "is considered scheduled by WLCG policy."

        return True

    def get_start_datetime(self):
        return datetime.datetime.combine(self.start_date.data,
                                         self.start_time.data)

    def get_end_datetime(self):
        return datetime.datetime.combine(self.end_date.data,
                                         self.end_time.data)

    def get_yaml(self) -> str:

        created_datetime = datetime.datetime.utcnow()
        dtid = models._dtid(created_datetime)

        return models.get_downtime_yaml(
            id=dtid,
            start_datetime=self.get_start_datetime(),
            end_datetime=self.get_end_datetime(),
            created_datetime=created_datetime,
            description=self.description.data,
            severity=self.severity.data,
            class_=self.scheduled.data,
            resource_name=self.resource.data,
            services=self.services.data,
        )
예제 #21
0
class CardUnblockForm(Form):
    unblocked_at = DateField(u'Unblocked date',
                             display_format="%m/%d/%Y",
                             validators=[validators.required()])
예제 #22
0
class CardBlockForm(Form):
    reason = TextField(u'Reason', validators=[validators.required()])
    blocked_at = DateField(u'Blocked starting',
                           display_format="%m/%d/%Y",
                           validators=[validators.required()])
예제 #23
0
class ReminderForm(IndicoForm):
    default_widget_attrs = {'absolute_time': {'placeholder': 'HH:MM'}}
    recipient_fields = {'recipients', 'send_to_participants'}
    schedule_fields = {
        'schedule_type', 'absolute_date', 'absolute_time', 'relative_delta'
    }
    schedule_recipient_fields = recipient_fields | schedule_fields

    # Schedule
    schedule_type = IndicoRadioField(
        _('Type'), [DataRequired()],
        choices=[('relative', _("Relative to the event start time")),
                 ('absolute', _("Fixed date/time")),
                 ('now', _('Send immediately'))])
    relative_delta = TimeDeltaField(
        _('Offset'),
        [HiddenUnless('schedule_type', 'relative'),
         DataRequired()])
    absolute_date = DateField(
        _('Date'), [HiddenUnless('schedule_type', 'absolute'),
                    DataRequired()],
        parse_kwargs={'dayfirst': True})
    absolute_time = TimeField(
        _('Time'),
        [HiddenUnless('schedule_type', 'absolute'),
         InputRequired()])
    # Recipients
    recipients = EmailListField(_('Email addresses'),
                                description=_('One email address per line.'))
    send_to_participants = BooleanField(
        _('Participants'),
        description=_('Send the reminder to all participants/registrants '
                      'of the event.'))
    # Misc
    reply_to_address = SelectField(
        _('Sender'), [DataRequired()],
        description=_('The email address that will show up as the sender.'))
    message = TextAreaField(
        _('Note'), description=_('A custom message to include in the email.'))
    include_summary = BooleanField(
        _('Include agenda'),
        description=_(
            "Includes a simple text version of the event's agenda in the email."
        ))

    def __init__(self, *args, **kwargs):
        self.event = kwargs.pop('event')
        super(ReminderForm, self).__init__(*args, **kwargs)
        self.absolute_time.description = _(
            'Your active timezone is {tz}.').format(tz=self.timezone)
        self._set_email_choices()
        if self.event.getType() == 'simple_event':
            del self.include_summary

    def _set_email_choices(self):
        # User
        emails = {session.user.email: session.user.full_name}
        # Creator
        emails[self.event.as_event.creator.
               email] = self.event.as_event.creator.full_name
        # Support
        support = self.event.getSupportInfo()
        emails[support.getEmail()] = support.getCaption() or support.getEmail()
        # Chairs
        emails.update((pl.email, pl.full_name)
                      for pl in self.event.as_event.person_links if pl.email)
        # Current email to avoid destructive modifications
        emails.setdefault(self.reply_to_address.object_data,
                          self.reply_to_address.object_data)
        # Sanitize and format emails
        emails = {
            to_unicode(email.strip().lower()):
            '{} <{}>'.format(to_unicode(name), to_unicode(email))
            for email, name in emails.iteritems() if email and email.strip()
        }
        self.reply_to_address.choices = sorted(
            emails.items(),
            key=lambda x: (x[0] != session.user.email, x[1].lower()))

    def validate_recipients(self, field):
        if not field.data and not self.send_to_participants.data:
            raise ValidationError(
                _('If participants are not included you need to specify recipients.'
                  ))

    def validate_send_to_participants(self, field):
        if not field.data and not self.recipients.data:
            raise ValidationError(
                _('If no recipients are specified you need to include participants.'
                  ))

    def validate_schedule_type(self, field):
        # Be graceful and allow a reminder that's in the past but on the same day.
        # It will be sent immediately but that way we are a little bit more user-friendly
        if field.data == 'now':
            return
        scheduled_dt = self.scheduled_dt.data
        if scheduled_dt is not None and scheduled_dt.date() < now_utc().date():
            raise ValidationError(_('The specified date is in the past'))

    def validate_absolute_date(self, field):
        if self.schedule_type.data == 'absolute' and field.data < date.today():
            raise ValidationError(_('The specified date is in the past'))

    @property
    def timezone(self):
        return DisplayTZ(conf=self.event).getDisplayTZ()

    @generated_data
    def scheduled_dt(self):
        if self.schedule_type.data == 'absolute':
            if self.absolute_date.data is None or self.absolute_time.data is None:
                return None
            dt = datetime.combine(self.absolute_date.data,
                                  self.absolute_time.data)
            return get_timezone(self.timezone).localize(dt).astimezone(
                pytz.utc)
        elif self.schedule_type.data == 'relative':
            if self.relative_delta.data is None:
                return None
            return self.event.getStartDate() - self.relative_delta.data
        elif self.schedule_type.data == 'now':
            return now_utc()

    @generated_data
    def event_start_delta(self):
        return self.relative_delta.data if self.schedule_type.data == 'relative' else None
예제 #24
0
class AssebledChartForm(Form):
	date_from = DateField('From', widget=DatePickerWidget())
	date_to = DateField('To', widget=DatePickerWidget())
	submit = SubmitField('Submit')
예제 #25
0
class TaskForm(Form):
    name = TextField('name', validators=[Length(max=20), Required()])
    description = TextField('description')
    end = DateField('end', validators=[Required()])
예제 #26
0
class AccountDobSetForm(Form):
    dob = DateField('Date of birth (yyyy-mm-dd)', [validators.Required()])
예제 #27
0
class ReminderForm(IndicoForm):
    default_widget_attrs = {'absolute_time': {'placeholder': 'HH:MM'}}
    recipient_fields = {'recipients', 'send_to_participants'}
    schedule_fields = {
        'schedule_type', 'absolute_date', 'absolute_time', 'relative_delta'
    }
    schedule_recipient_fields = recipient_fields | schedule_fields

    # Schedule
    schedule_type = IndicoRadioField(
        _('Type'), [DataRequired()],
        choices=[('relative', _("Relative to the event start time")),
                 ('absolute', _("Fixed date/time")),
                 ('now', _('Send immediately'))])
    relative_delta = TimeDeltaField(
        _('Offset'),
        [HiddenUnless('schedule_type', 'relative'),
         DataRequired()])
    absolute_date = DateField(
        _('Date'), [HiddenUnless('schedule_type', 'absolute'),
                    DataRequired()],
        parse_kwargs={'dayfirst': True})
    absolute_time = TimeField(
        _('Time'),
        [HiddenUnless('schedule_type', 'absolute'),
         InputRequired()])
    # Recipients
    recipients = EmailListField(_('Email addresses'),
                                description=_('One email address per line.'))
    send_to_participants = BooleanField(
        _('Participants'),
        description=_('Send the reminder to all participants/registrants '
                      'of the event.'))
    # Misc
    reply_to_address = SelectField(
        _('Sender'), [DataRequired()],
        description=_('The email address that will show up as the sender.'))
    message = TextAreaField(
        _('Note'), description=_('A custom message to include in the email.'))
    include_summary = BooleanField(
        _('Include agenda'),
        description=_(
            "Includes a simple text version of the event's agenda in the email."
        ))

    def __init__(self, *args, **kwargs):
        self.event = kwargs.pop('event')
        super(ReminderForm, self).__init__(*args, **kwargs)
        self.absolute_time.description = _(
            "The event's timezone is {tz}.").format(tz=self.event.tzinfo)
        self.reply_to_address.choices = (self.event.get_allowed_sender_emails(
            extra=self.reply_to_address.object_data).items())
        if self.event.type_ == EventType.lecture:
            del self.include_summary

    def validate_recipients(self, field):
        if not field.data and not self.send_to_participants.data:
            raise ValidationError(
                _('If participants are not included you need to specify recipients.'
                  ))

    def validate_send_to_participants(self, field):
        if not field.data and not self.recipients.data:
            raise ValidationError(
                _('If no recipients are specified you need to include participants.'
                  ))

    def validate_schedule_type(self, field):
        # Be graceful and allow a reminder that's in the past but on the same day.
        # It will be sent immediately but that way we are a little bit more user-friendly
        if field.data == 'now':
            return
        scheduled_dt = self.scheduled_dt.data
        if scheduled_dt is not None and scheduled_dt.date() < now_utc().date():
            raise ValidationError(_('The specified date is in the past'))

    def validate_absolute_date(self, field):
        if self.schedule_type.data == 'absolute' and field.data < date.today():
            raise ValidationError(_('The specified date is in the past'))

    @generated_data
    def scheduled_dt(self):
        if self.schedule_type.data == 'absolute':
            if self.absolute_date.data is None or self.absolute_time.data is None:
                return None
            dt = datetime.combine(self.absolute_date.data,
                                  self.absolute_time.data)
            return self.event.tzinfo.localize(dt).astimezone(pytz.utc)
        elif self.schedule_type.data == 'relative':
            if self.relative_delta.data is None:
                return None
            return self.event.start_dt - self.relative_delta.data
        elif self.schedule_type.data == 'now':
            return now_utc()

    @generated_data
    def event_start_delta(self):
        return self.relative_delta.data if self.schedule_type.data == 'relative' else None
예제 #28
0
파일: forms.py 프로젝트: dleister77/Ask
class ReviewForm(FlaskForm):
    """Form to submit review.

    Fields:
        name (str): disabled (display only). Name of business being reviewed
        id (int): hidden, id of business being reviewed
        category (select): category for service/business being reviewed
        rating (radio): Numeric rating of 1 to 5 for total quality
        cost (radio): Numeric rating of 1 to 5 based on perceived cost
        description (str): Optional, short description of service provided or
            business interraction
        service_date (Date): Optional, date of service or interraction w/
            business
        comments (text): Optional, longer description/commentary of review
        picture (File): Optional, add pictures to review

    Methods:
        validate_name: checks that submitted id and name match
        validate_category: checks that review category is category of the
        business
        """

    name = StringField(
        "Provider / Business Name",
        render_kw={'readonly': True},
        validators=[InputRequired(message="Business name is required.")])
    id = HiddenField(
        "Provider Value",
        render_kw={'readonly': True},
        validators=[
            InputRequired(
                message="Business id is required. Do not remove from form "
                "submission.")
        ])
    category = SelectField(
        "Category",
        choices=[],
        validators=[InputRequired(message="Category is required.")],
        coerce=int,
        id="category")
    rating = RadioField(
        "Overall Rating",
        choices=[(5, "***** (Highest quality)"), (4, "**** (Above Average)"),
                 (3, "*** (Satisfied - should be default choice"),
                 (2, "** (Below Average)"), (1, "* (Stay away from!)")],
        coerce=int,
        validators=[InputRequired(message="Rating is required.")])
    cost = RadioField("Cost- rating",
                      choices=[(5, "$$$$$ (Much higher than competitors)"),
                               (4, "$$$$ (Above Average)"),
                               (3, "$$$ (Average / should be default choice"),
                               (2, "$$ (Below Average)"),
                               (1, "$ (Significantly less than competitors)")],
                      coerce=int,
                      validators=[InputRequired(message="Cost is required.")])
    price_paid = StringField("Price Paid",
                             filters=(dollar_filter, int_filter),
                             validators=[Optional()])
    description = StringField("Service Description", validators=[Optional()])
    service_date = DateField("Service Date",
                             validators=[validate_date,
                                         Optional()])
    comments = TextAreaField("Comments",
                             render_kw={"rows": 6},
                             validators=[Optional()])
    picture = MultipleFileField("Picture",
                                render_kw=({
                                    "accept": 'image/*'
                                }),
                                validators=[Picture_Upload_Check,
                                            Optional()])
    certify = BooleanField(
        "Reviewer confirms that they have neither received compensation for "
        "review nor are related (relative, employee) to business being "
        "reviewed.",
        validators=[
            InputRequired(
                "Review unable to be submitted unless reviewer confirms "
                "agreement.")
        ])
    submit = SubmitField("Submit", id="review_submit")

    def validate_name(self, name):
        """Validates name field as well as id hidden field."""
        provider = Provider.query.get(self.id.data)
        if provider is None:
            pass
        elif provider.name != name.data:
            raise ValidationError(
                "Submitted name and id combination are invalid.")

    def validate_category(self, category):
        """Checks that category is valid category for provider."""
        id = self.id.data
        if id is None or id == "":
            pass
        else:
            bizCategories = [c.id for c in Provider.query.get(id).categories]
            if category.data not in bizCategories:
                raise ValidationError(
                    "Category not valid for business being reviewed.")

    def validate_price_paid(self, price_paid):
        if price_paid.data is not None and price_paid.data != '':
            price_paid_num = int(price_paid.data)
            if price_paid_num < 0:
                raise ValidationError("Dollar cost must be greater than 0.")
 class F(Form):
     a = DateTimeField()
     b = DateField(default=lambda: date(2004, 9, 12))
     c = DateField(parse_kwargs=dict(yearfirst=True, dayfirst=False))
예제 #30
0
class GoalForm(Form):
    name = TextField('name', validators=[Required()])
    description = TextField('description')
    end = DateField('end', validators=[Required()])
    people = TagListField('people',
                          validators=[validUserCheck, emptinessCheck])