예제 #1
0
    def entry_form(self):
        '''
        create an entry form for manager use
        '''
        if not hasattr(self, 'form'):
            class_name = 'ContentEntryForm'
            class_parents = (Form,)
            attributes = {}

            form = type(class_name, (Form,), {})

            title_field = TextField('Title', [Required('Title is required')])
            title_field.bind(form, 'content_entry_title')
            setattr(form, 'content_entry_title', title_field)
            slug_field = TextField('Slug', [Required('Slug is required')])
            slug_field.bind(form, 'content_entry_slug')
            setattr(form, 'content_entry_slug', slug_field)

            tag_field = TextField('Tags')
            tag_field.bind(form, 'content_entry_tag')
            setattr(form, 'content_entry_tag', tag_field)

            status_field = SelectField('Status', choices=self.status_options)
            status_field.bind(form, 'content_entry_status')
            setattr(form, 'content_entry_status', status_field)

            save_field = SubmitField('Save')
            save_field.bind(form, 'content_entry_save')
            setattr(form, 'content_entry_save', save_field)

            delete_field = SubmitField('Delete')
            delete_field.bind(form, 'content_entry_delete')
            setattr(form, 'content_entry_delete', delete_field)

            field_groups = []
            for group in self.field_groups:
                if group.fields:
                    field_group = {'uuid': group.uuid,
                                   'name': group.name,
                                   'fields': []}
                    for field in group.fields:
                        form_field = field.field(field.name)
                        form_field.bind(form, field.name)
                        setattr(form, field.name, form_field)

                        field_group['fields'].append(field.name)
                    field_groups.append(field_group)
            attributes['_field_groups'] = field_groups
            self.form = form
            self.form._field_groups = field_groups
        return self.form
예제 #2
0
def edit_from_suggestion(suggestion_id):
    """Edit a resource from suggestion."""
    suggestion = ResourceSuggestion.query.get(suggestion_id)
    if suggestion is None:
        abort(404)
    resource = Resource.query.get(suggestion.resource_id)
    if resource is None:
        abort(404)

    resource_field_names = Resource.__table__.columns.keys()
    suggestion_field_names = ResourceSuggestion.__table__.columns.keys()
    descriptors = Descriptor.query.all()
    # req_opt_desc = RequiredOptionDescriptor.query.all()[0]
    for descriptor in descriptors:
        if descriptor.is_option_descriptor and \
                        descriptor.name != 'supercategories':
            choices = [(str(i), v) for i, v in enumerate(descriptor.values)]

            default_resource = None
            option_associations_resource = OptionAssociation.query.\
                filter_by(resource_id=resource.id,
                          descriptor_id=descriptor.id)
            if option_associations_resource is not None:
                default_resource = [
                    assoc.option for assoc in option_associations_resource
                ]

            if descriptor.name == 'city':
                default_resource = default_resource[0]
                setattr(SingleResourceForm, descriptor.name,
                        SelectField(choices=choices, default=default_resource))
            else:
                setattr(
                    SingleResourceForm, descriptor.name,
                    SelectMultipleField(choices=choices,
                                        default=default_resource))

            default_suggestion = None
            option_associations_suggestion = OptionAssociation.query.\
                filter_by(resource_id=suggestion_id,
                          descriptor_id=descriptor.id)
            if option_associations_suggestion is not None:
                default_suggestion = [
                    assoc.option for assoc in option_associations_suggestion
                ]

            if descriptor.name == 'city':
                default_suggestion = default_suggestion[0]
                setattr(
                    SingleResourceForm, descriptor.name,
                    SelectField(choices=choices, default=default_suggestion))
            else:
                setattr(
                    SingleResourceForm, descriptor.name,
                    SelectMultipleField(choices=choices,
                                        default=default_suggestion))

    for descriptor in descriptors:
        if not descriptor.is_option_descriptor:
            default_resource = None
            text_association_resource = TextAssociation.query.filter_by(
                resource_id=resource.id, descriptor_id=descriptor.id).first()
            if text_association_resource is not None:
                default_resource = text_association_resource.text
            setattr(SingleResourceForm, descriptor.name,
                    TextAreaField(default=default_resource))

            default_suggestion = None
            text_association_suggestion = TextAssociation.query.filter_by(
                resource_id=suggestion_id,
                descriptor_id=descriptor.id).first()
            if text_association_suggestion is not None:
                default_suggestion = text_association_suggestion.text
                if descriptor.name == 'report count':
                    default_suggestion = default_resource
            setattr(SingleResourceForm, descriptor.name,
                    TextAreaField(default=default_suggestion))

    form_resource = SingleResourceForm()
    form_suggestion = SingleResourceForm()
    if form_suggestion.validate_on_submit():
        # replace reosurce's fields
        resource.name = form_suggestion.name.data
        resource.address = form_suggestion.address.data
        resource.latitude = form_suggestion.latitude.data
        resource.longitude = form_suggestion.longitude.data
        # Field id is not needed for the form, hence omitted with [1:].
        for field_name in suggestion_field_names[1:]:
            if field_name in form_suggestion:
                setattr(resource, field_name, form_suggestion[field_name].data)
        save_associations(resource=resource,
                          form=form_suggestion,
                          descriptors=descriptors,
                          resource_existed=True)
        db.session.add(resource)
        try:
            db.session.commit()
            flash('Resource added', 'form-success')
            db.session.delete(suggestion)
            try:
                db.session.commit()
                flash('Suggestion successfully deleted.', 'success')
            except:
                db.session.rollback()
                flash('Database error occurred. Please try again.', 'error')
            return redirect(url_for('single_resource.index'))
        except IntegrityError:
            db.session.rollback()
            flash('Error: failed to save resource. Please try again.',
                  'form-error')

    for field_name in resource_field_names:
        if field_name in form_resource:
            form_resource[field_name].data = resource.__dict__[field_name]

    for field_name in suggestion_field_names:
        if field_name in form_suggestion:
            form_suggestion[field_name].data = suggestion.__dict__[field_name]
            if field_name == 'latitude' or field_name == 'longitude':
                form_suggestion[field_name].data = resource.__dict__[
                    field_name]

    return render_template('single_resource/edit_from_suggestion.html',
                           form_resource=form_resource,
                           form=form_suggestion)
예제 #3
0
def create_from_suggestion(suggestion_id):
    """Add a resource from suggestion."""
    suggestion = ResourceSuggestion.query.get(suggestion_id)
    if suggestion is None:
        abort(404)

    suggestion_field_names = Resource.__table__.columns.keys()
    descriptors = Descriptor.query.all()
    # req_opt_desc = RequiredOptionDescriptor.query.all()[0]
    for descriptor in descriptors:
        if descriptor.is_option_descriptor and \
                        descriptor.name != 'supercategories':
            choices = [(str(i), v) for i, v in enumerate(descriptor.values)]
            default = None
            option_associations = OptionAssociation.query.filter_by(
                resource_id=suggestion_id, descriptor_id=descriptor.id)
            if option_associations is not None:
                default = [assoc.option for assoc in option_associations]

            if descriptor.name == 'city':
                setattr(SingleResourceForm, descriptor.name,
                        SelectField(choices=choices, default=default))
            else:
                setattr(SingleResourceForm, descriptor.name,
                        SelectMultipleField(choices=choices, default=default))

    for descriptor in descriptors:
        if not descriptor.is_option_descriptor:
            default = None
            text_association = TextAssociation.query.filter_by(
                resource_id=suggestion_id,
                descriptor_id=descriptor.id).first()
            if text_association is not None:
                default = text_association.text
            setattr(SingleResourceForm, descriptor.name,
                    TextAreaField(default=default))

    form = SingleResourceForm()
    if form.validate_on_submit():
        new_resource = Resource(name=form.name.data)
        # Field id is not needed for the form, hence omitted with [1:].
        for field_name in suggestion_field_names[1:]:
            if field_name in form and form[field_name].data:
                setattr(new_resource, field_name, form[field_name].data)
        save_associations(resource=new_resource,
                          form=form,
                          descriptors=descriptors,
                          resource_existed=False)
        db.session.add(new_resource)
        try:
            db.session.commit()
            flash('Resource added', 'form-success')
            db.session.delete(suggestion)
            try:
                db.session.commit()
                flash('Suggestion successfully deleted.', 'success')
            except:
                db.session.rollback()
                flash('Database error occurred. Please try again.', 'error')
            return redirect(url_for('single_resource.index'))
        except IntegrityError:
            db.session.rollback()
            flash('Error: failed to save resource. Please try again.',
                  'form-error')
    for field_name in suggestion_field_names:
        if field_name in form:
            form[field_name].data = suggestion.__dict__[field_name]

    return render_template('single_resource/create.html', form=form)
예제 #4
0
 def test_empty_choice(self, choices):
     F = make_form(a=SelectField(choices=choices, validate_choice=False))
     form = F(a="bar")
     assert form.a() == '<select id="a" name="a"></select>'
예제 #5
0
 def test_validate_choices_when_none(self):
     F = make_form(a=SelectField())
     form = F(DummyPostData(a="b"))
     with pytest.raises(TypeError, match="Choices cannot be None"):
         form.validate()
예제 #6
0
class DataToCalcForm(FlaskForm):
    """
    Form for adquire needed data for calculations.
    """

    latitude = FloatField(
        'Latitud (°)',
        validators=[DataRequired(), is_numeric, bound_latitude]
    )

    longitude = FloatField(
        'Longitud (°)',
        validators=[DataRequired(), is_numeric, bound_longitude]
    )

    width = FloatField(
        'Ancho disponible [m]',
        validators=[DataRequired(), is_positive, is_numeric]
    )

    height = FloatField(
        'Largo disponible [m]',
        validators=[DataRequired(), is_positive, is_numeric]
    )

    average_payment_bim = FloatField(
        'Pago promedio de electricidad al bimestre [$]',
        validators=[DataRequired(), is_positive, is_numeric]
    )

    actual_fee = SelectField(
        'Cúal es tu tarifa:',
        choices=[('DAC', 'DAC'), ('other', 'Otra')]
    )

    submit = SubmitField('Calcular')

    def is_valid(self):
        """
        Valid forms.
        """

        if self.validate_on_submit():
            return True
        else:
            return False

    def get_data(self):
        """
        Get all data and returns it.
        """

        data = {
            'latitude': self.latitude.data,
            'longitude': self.longitude.data,
            'width': self.width.data,
            'height': self.height.data,
            'average_payment': self.average_payment_bim.data,
            'fee': self.actual_fee.data,
        }

        return data
예제 #7
0
class ValidateChild(Form):
    parent_id = SelectField(choices=[])
    jmeno = TextField("Jmeno",
                      validators=[InputRequired(message="vyzadovano")])
예제 #8
0
class ReminderForm(IndicoForm):
    recipient_fields = {'recipients', 'send_to_participants'}
    schedule_fields = {'schedule_type', 'absolute_dt', '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_dt = IndicoDateTimeField(_('Date'), [
        HiddenUnless('schedule_type', 'absolute'),
        DataRequired(),
        DateTimeRange()
    ])
    # 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."
        ))
    include_description = BooleanField(
        _('Include description'),
        description=_("Includes the event's description in the email."))

    def __init__(self, *args, **kwargs):
        self.event = kwargs.pop('event')
        self.timezone = self.event.timezone
        super().__init__(*args, **kwargs)
        self.reply_to_address.choices = (list(
            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'))

    @generated_data
    def scheduled_dt(self):
        if self.schedule_type.data == 'absolute':
            if self.absolute_dt.data is None:
                return None
            return self.absolute_dt.data
        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
예제 #9
0
class Todoform(FlaskForm):
    title = StringField('Titulo', validators=[DataRequired()])
    description = StringField('Descripción', validators=[DataRequired()])
    priority = SelectField("Prioridad",choices=[("Baja","Baja"),("Media","Media"),("Alta","Alta"),("Urgente","Urgente")]     )
    deadline = DateField('Plazo', format='%Y-%m-%d', validators=[Optional()])
    submit = SubmitField('Crear')
예제 #10
0
class TemplateDestinationForm(BaseDestinationForm):
    select_field = 'template'

    template = SelectField()
예제 #11
0
class searchForm(FlaskForm):  # creates the form for the search field
    category = SelectField("Category", choices=[(
        'CPU', 'CPU'), ('GPU', 'GPU'), ('Case', 'Case'), ('Memory', 'Memory'), ('Motherboard', 'Motherboard'), ('CPU Cooler', 'CPU Cooler'), ('Storage', 'Storage'), ('Peripherals', 'Peripherals'), ('Power Supply', 'Power Supply')])
    submit = SubmitField("Search")
예제 #12
0
class TimeDepositForm(FlaskForm):
    account_number = IntegerField(
        'Account Number',
        [Required(), validate_account_number, validate_time_deposit])
    duration = SelectField('Duration', [Required()], coerce=int)
    amount = DecimalField('Amount', [Required(), NumberRange(200)], places=2)
예제 #13
0
class GoalSheetAssignmentFormFromFile(FlaskForm):
    templateList = SelectField(u'Template to Assign', choices=[])
    item = FileField("Enter Value")
    submit = SubmitField('Upload')  #
예제 #14
0
class GoalSheetAssignmentForm(FlaskForm):
    templateList = SelectField(u'Template to Assign', choices=[])
    candiateEmail = SelectField(u'Assign To Individual',
                                choices=[],
                                default='')
    addemail = SubmitField('Add')  #
예제 #15
0
파일: form.py 프로젝트: estsauver/wazo-ui
class ConferenceDestinationForm(BaseForm):
    set_value_template = '{conference_name}'

    conference_id = SelectField('Conference', choices=[], validators=[InputRequired()])
    conference_name = DestinationHiddenField()
예제 #16
0
class UpdateDetailsForm(Form):
    grade = SelectField('Grade')
    profession = TextField('Profession')
예제 #17
0
class RegistrationForm(FlaskForm):
    STATE_CHOICES = [('AK', 'Alaska'), ('AL', 'Alabama'), ('AR', 'Arkansas'),
                     ('AS', 'American Samoa'), ('AZ', 'Arizona'),
                     ('CA', 'California'), ('CO', 'Colorado'),
                     ('CT', 'Connecticut'), ('DC', 'District of Columbia'),
                     ('DE', 'Delaware'), ('FL', 'Florida'), ('GA', 'Georgia'),
                     ('GU', 'Guam'), ('HI', 'Hawaii'), ('IA', 'Iowa'),
                     ('ID', 'Idaho'), ('IL', 'Illinois'), ('IN', 'Indiana'),
                     ('KS', 'Kansas'), ('KY', 'Kentucky'), ('LA', 'Louisiana'),
                     ('MA', 'Massachusetts'), ('MD', 'Maryland'),
                     ('ME', 'Maine'), ('MI', 'Michigan'), ('MN', 'Minnesota'),
                     ('MO', 'Missouri'), ('MP', 'Northern Mariana Islands'),
                     ('MS', 'Mississippi'), ('MT', 'Montana'),
                     ('NA', 'National'), ('NC', 'North Carolina'),
                     ('ND', 'North Dakota'), ('NE', 'Nebraska'),
                     ('NH', 'New Hampshire'), ('NJ', 'New Jersey'),
                     ('NM', 'New Mexico'), ('NV', 'Nevada'),
                     ('NY', 'New York'), ('OH', 'Ohio'), ('OK', 'Oklahoma'),
                     ('OR', 'Oregon'), ('PA', 'Pennsylvania'),
                     ('PR', 'Puerto Rico'), ('RI', 'Rhode Island'),
                     ('SC', 'South Carolina'), ('SD', 'South Dakota'),
                     ('TN', 'Tennessee'), ('TX', 'Texas'), ('UT', 'Utah'),
                     ('VA', 'Virginia'), ('VI', 'Virgin Islands'),
                     ('VT', 'Vermont'), ('WA', 'Washington'),
                     ('WI', 'Wisconsin'), ('WV', 'West Virginia'),
                     ('WY', 'Wyoming')]

    state = SelectField(label='State',
                        validators=[DataRequired()],
                        choices=STATE_CHOICES)

    income = IntegerField('Income', validators=[DataRequired()])

    loanAmnt = IntegerField('Loan Amount', validators=[DataRequired()])

    gender = SelectField(u'Gender',
                         validators=[DataRequired()],
                         choices=[('f', 'Female'), ('m', 'Male'),
                                  ('na', 'Not Applicable')])

    race = SelectField(u'Race',
                       validators=[DataRequired()],
                       choices=[('nativeAmerican',
                                 'American Indian or Alaska Native'),
                                ('asian', 'Asian'),
                                ('africanAmerican',
                                 'Black or African American'),
                                ('pacificIslander',
                                 'Native Hawaiian or Other Pacific Islander'),
                                ('white', 'White'), ('na', 'Not Applicable')])

    ethnicity = SelectField(u'Ethnicity',
                            validators=[DataRequired()],
                            choices=[('hispanic', 'Hispanic or Latino'),
                                     ('notHispanic', 'Not Hispanic or Latino'),
                                     ('na', 'Not Applicable')])
    """
    TODO
    delete email field if not using database
    """
    email = StringField('Email', validators=[DataRequired(), Email()])

    submit = SubmitField('Submit')
예제 #18
0
class ValidateParent(Form):
    prijmeni = TextField("Prijmeni",
                         validators=[InputRequired(message="vyzadovano")])
    pohlavi = SelectField("Pohlavi",
                          choices=[(1, "zena"), (1, "muz")],
                          validators=[InputRequired])
예제 #19
0
class ChatForm(FlaskForm):
    room = SelectField('Room', [validators.Required()], id='room')
    submit = SubmitField('Enter Chatroom')
예제 #20
0
class ValidateChild(Form):
    parent_id = SelectField(choices=[])
    jmeno = TextField(
        "Jmeno",
        validators=[InputRequired(message="You can't leave this empty")])
예제 #21
0
class RegistrationFormForm(IndicoForm):
    _price_fields = ('currency', 'base_price')
    _registrant_notification_fields = ('notification_sender_address',
                                       'message_pending', 'message_unpaid',
                                       'message_complete')
    _manager_notification_fields = ('manager_notifications_enabled',
                                    'manager_notification_recipients')
    _special_fields = _price_fields + _registrant_notification_fields + _manager_notification_fields

    title = StringField(_("Title"), [DataRequired()],
                        description=_("The title of the registration form"))
    introduction = TextAreaField(
        _("Introduction"),
        description=
        _("Introduction to be displayed when filling out the registration form"
          ))
    contact_info = StringField(
        _("Contact info"),
        description=
        _("How registrants can get in touch with somebody for extra information"
          ))
    moderation_enabled = BooleanField(
        _("Moderated"),
        widget=SwitchWidget(),
        description=_("If enabled, registrations require manager approval"))
    require_login = BooleanField(
        _("Only logged-in users"),
        widget=SwitchWidget(),
        description=_("Users must be logged in to register"))
    require_user = BooleanField(
        _("Registrant must have account"),
        widget=SwitchWidget(),
        description=_(
            "Registrations emails must be associated with an Indico account"))
    limit_registrations = BooleanField(
        _("Limit registrations"),
        widget=SwitchWidget(),
        description=_("Whether there is a limit of registrations"))
    registration_limit = IntegerField(
        _("Capacity"), [
            HiddenUnless('limit_registrations'),
            DataRequired(),
            NumberRange(min=1)
        ],
        description=_("Maximum number of registrations"))
    modification_mode = IndicoEnumSelectField(
        _("Modification allowed"),
        enum=ModificationMode,
        description=_("Will users be able to modify their data? When?"))
    publish_registrations_enabled = BooleanField(
        _('Publish registrations'),
        widget=SwitchWidget(),
        description=_("Registrations from this form will be displayed in the "
                      "event page"))
    publish_checkin_enabled = BooleanField(
        _('Publish check-in status'),
        widget=SwitchWidget(),
        description=_(
            "Check-in status will be shown publicly on the event page"))
    base_price = DecimalField(
        _('Registration fee'),
        [NumberRange(min=0),
         Optional(), _check_if_payment_required],
        filters=[lambda x: x if x is not None else 0],
        widget=NumberInput(step='0.01'),
        description=_("A fixed fee all users have to pay when registering."))
    currency = SelectField(_('Currency'), [DataRequired()],
                           description=_('The currency for new registrations'))
    notification_sender_address = StringField(_('Notification sender address'),
                                              [IndicoEmail()],
                                              filters=[lambda x: (x or None)])
    message_pending = TextAreaField(
        _("Message for pending registrations"),
        description=_("Text included in emails sent to pending registrations"))
    message_unpaid = TextAreaField(
        _("Message for unpaid registrations"),
        description=_("Text included in emails sent to unpaid registrations"))
    message_complete = TextAreaField(
        _("Message for complete registrations"),
        description=_(
            "Text included in emails sent to complete registrations"))
    manager_notifications_enabled = BooleanField(
        _('Enabled'),
        widget=SwitchWidget(),
        description=_("Enable notifications to managers about registrations"))
    manager_notification_recipients = EmailListField(
        _('List of recipients'), [
            HiddenUnless('manager_notifications_enabled', preserve_data=True),
            DataRequired()
        ],
        description=_("Email addresses that will receive notifications"))

    def __init__(self, *args, **kwargs):
        self.event = kwargs.pop('event')
        super(IndicoForm, self).__init__(*args, **kwargs)
        self._set_currencies()
        default_sender_address = Config.getInstance().getNoReplyEmail()
        self.notification_sender_address.description = _(
            'Email address set as the sender of all '
            'notifications sent to users. If empty, '
            'then {0} is used.'.format(default_sender_address))

    def _set_currencies(self):
        currencies = [(c['code'], '{0[code]} ({0[name]})'.format(c))
                      for c in payment_global_settings.get('currencies')]
        self.currency.choices = sorted(currencies, key=lambda x: x[1].lower())
예제 #22
0
class ConferenceLayoutForm(IndicoForm):
    is_searchable = BooleanField(
        _("Enable search"),
        widget=SwitchWidget(),
        description=_("Enable search within the event"))
    show_nav_bar = BooleanField(
        _("Show navigation bar"),
        widget=SwitchWidget(),
        description=_("Show the navigation bar at the top"))
    show_banner = BooleanField(
        _("\"Now happening\""),
        widget=SwitchWidget(on_label=_("ON"), off_label=_("OFF")),
        description=_(
            "Show a banner with the current entries from the timetable"))
    show_social_badges = BooleanField(_("Show social badges"),
                                      widget=SwitchWidget())

    # Style
    header_text_color = StringField(_("Text colour"),
                                    widget=ColorPickerWidget())
    header_background_color = StringField(_("Background colour"),
                                          widget=ColorPickerWidget())

    # Announcement
    announcement = StringField(
        _("Announcement"),
        [UsedIf(lambda form, field: form.show_announcement.data)],
        description=_("Short message shown below the title"))
    show_announcement = BooleanField(
        _("Show announcement"),
        widget=SwitchWidget(),
        description=_("Show the announcement message"))

    # Timetable
    timetable_by_room = BooleanField(
        _("Group by room"),
        widget=SwitchWidget(),
        description=_("Group the entries of the timetable by room by default"))
    timetable_detailed = BooleanField(
        _("Show detailed view"),
        widget=SwitchWidget(),
        description=_("Show the detailed view of the timetable by default."))
    timetable_theme = SelectField(_('Theme'), [Optional()],
                                  coerce=lambda x: x or None)
    # Themes
    use_custom_css = BooleanField(
        _("Use custom CSS"),
        widget=SwitchWidget(),
        description=_(
            "Use a custom CSS file as a theme for the conference page. Deactivate "
            "this option to reveal the available Indico themes."))
    theme = SelectField(
        _("Theme"),
        [Optional(), HiddenUnless('use_custom_css', False)],
        coerce=lambda x: (x or None),
        description=_(
            "Currently selected theme of the conference page. Click on the Preview button to "
            "preview and select a different one."))

    def __init__(self, *args, **kwargs):
        self.event = kwargs.pop('event')
        super(ConferenceLayoutForm, self).__init__(*args, **kwargs)
        self.timetable_theme.choices = [
            ('', _('Default'))
        ] + _get_timetable_theme_choices(self.event)
        self.theme.choices = _get_conference_theme_choices()

    def validate_use_custom_css(self, field):
        if field.data and not self.event.has_stylesheet:
            raise ValidationError(
                _('Cannot enable custom stylesheet unless there is one.'))
예제 #23
0
class DateTimeWithNumRunsWithDagRunsForm(DateTimeWithNumRunsForm):
    # Date time and number of runs and dag runs form for graph and gantt view
    execution_date = SelectField("DAG run")
예제 #24
0
 def test_choice_shortcut(self):
     F = make_form(
         a=SelectField(choices=["foo", "bar"], validate_choice=False))
     form = F(a="bar")
     assert '<option value="foo">foo</option>' in form.a()
예제 #25
0
class SelectEndpoint(FlaskForm):
    endpoint = SelectField('Endpoint', validators=[DataRequired()])
    submit = SubmitField()
예제 #26
0
class masoform(Form):
    typ=SelectField('Typ', choices=[(1, "Hovezi"), (2, "Veprove")], default=2)
예제 #27
0
 def test_choice_shortcut_post(self):
     F = make_form(a=SelectField(choices=["foo", "bar"]))
     form = F(DummyPostData(a=["foo"]))
     assert form.validate()
     assert form.a.data == "foo"
     assert len(form.a.errors) == 0
예제 #28
0
def edit(resource_id):
    """Edit a resource."""
    resource = Resource.query.get(resource_id)
    if resource is None:
        abort(404)
    resource_field_names = Resource.__table__.columns.keys()
    descriptors = Descriptor.query.all()
    for descriptor in descriptors:
        if descriptor.is_option_descriptor and \
                        descriptor.name != 'supercategories':
            choices = [(str(i), v) for i, v in enumerate(descriptor.values)]
            default = None
            option_associations = OptionAssociation.query.filter_by(
                resource_id=resource_id, descriptor_id=descriptor.id)
            if option_associations is not None:
                default = [assoc.option for assoc in option_associations]

            if descriptor.name == 'city':
                default = default[0]
                setattr(SingleResourceForm, descriptor.name,
                        SelectField(choices=choices, default=default))
            else:
                setattr(SingleResourceForm, descriptor.name,
                        SelectMultipleField(choices=choices, default=default))
    for descriptor in descriptors:
        if not descriptor.values:  # Fields for text descriptors.
            default = None
            text_association = TextAssociation.query.filter_by(
                resource_id=resource_id, descriptor_id=descriptor.id).first()
            if text_association is not None:
                default = text_association.text
            setattr(SingleResourceForm, descriptor.name,
                    TextAreaField(default=default))
    form = SingleResourceForm()
    if form.validate_on_submit():
        req_opt_desc = RequiredOptionDescriptor.query.all()
        if req_opt_desc:
            req_opt_desc = req_opt_desc[0]
            descriptor = Descriptor.query.filter_by(
                id=req_opt_desc.descriptor_id).first()
            if descriptor is not None:
                if not form[descriptor.name].data:
                    flash(
                        'Error: Must set required descriptor: {}'.format(
                            descriptor.name), 'form-error')
                    return render_template('single_resource/edit.html',
                                           form=form,
                                           resource_id=resource_id)
        # Field id is not needed for the form, hence omitted with [1:].
        for field_name in resource_field_names[1:]:
            # Avoid KeyError from polymorphic, contact variables.
            if field_name in form:
                setattr(resource, field_name, form[field_name].data)
        save_associations(resource=resource,
                          form=form,
                          descriptors=descriptors,
                          resource_existed=True)
        try:
            db.session.commit()
            flash('Resource updated', 'form-success')
            return redirect(url_for('single_resource.index'))
        except IntegrityError:
            db.session.rollback()
            flash('Error: failed to save resource. Please try again.',
                  'form-error')
    # Field id is not needed for the form, hence omitted with [1:].
    for field_name in resource_field_names[1:]:
        if field_name in form:
            form[field_name].data = resource.__dict__[field_name]
    return render_template('single_resource/edit.html',
                           form=form,
                           resource_id=resource_id)
예제 #29
0
class SearchForm(FlaskForm):
    category = SelectField(u'Category',
                           choices=choices,
                           validators=[InputRequired()])
    town = StringField('Town', validators=[DataRequired()])
예제 #30
0
class ExtensionForm(BaseForm):
    exten = StringField(l_('Extension'), validators=[InputRequired()])
    context = SelectField(l_('Context'), validators=[InputRequired()])
예제 #31
0
class StatusForm(BaseForm):
    """Form to handle status annotation."""
    status = SelectField(u'Status',
                         choices=[(u'new', u'New'), (u'open', u'Open'),
                                  (u'closed', u'Closed')],
                         validators=[DataRequired()])