示例#1
0
class ProjectBudgetItemOverallForm(ModelForm):
    class Meta:
        model = ProjectBudgetItemOverall

    sub_category = QuerySelectField(
        ProjectBudgetSubCategory,
        query_factory=lambda: ProjectBudgetSubCategory.query.all(),
        widget=Select())
示例#2
0
文件: forms.py 项目: likit/labtycoon
class LabQualTestForm(ModelForm):
    class Meta:
        model = LabQualTest
    choice_set = QuerySelectField('Choice Set',
                                  widget=Select(),
                                  allow_blank=True,
                                  blank_text='ไม่ใช้ชุดคำตอบ',
                                  validators=[Optional()]
                                 )
示例#3
0
class ProjectPublicationForm(ModelForm):
    class Meta:
        model = ProjectPublication

    journals = QuerySelectField(
        ProjectPublicationJournal,
        query_factory=lambda: ProjectPublicationJournal.query.all(),
        get_label=lambda x: x.name,
        widget=Select())
示例#4
0
class ProjectPublicationAuthorForm(ModelForm):
    class Meta:
        model = ProjectPublicationAuthor

    users = QuerySelectField(
        User,
        query_factory=lambda: sorted([u for u in User.query.filter_by(role=2)],
                                     key=lambda x: x.fullname_thai),
        get_label=lambda x: x.profile.fullname_th,
        widget=Select(),
        validators=[Optional()])
class OutsideVerificationForm(Form):
	standard = AllStandardsData('Choose Standard')
	student = StringField(u'Student Name (Full Name)', widget=TextInput(), validators=[validators.input_required(message=NO_INPUT_ERROR)])
	
	verifier_name = StringField(u'Teacher name (Verifier)', widget=TextInput(), validators=[validators.input_required(message=NO_INPUT_ERROR)])
	verifier_school = StringField(u'School of Verifier', widget=TextInput())

	verifiers_grade = SelectField(u'Assessment judgement', widget=Select(), choices=GRADES, validators=[validators.NoneOf(values='No Grade',message='Please enter appropriate grade')])

	discussion = StringField(u'Discussion', widget=TextArea())

	finished = BooleanField(u"<p id='finished_p'>", widget=CheckboxInput(),validators=[validators.required(message="The sign off box above must be checked to submit data")])
示例#6
0
class CoveredArea(InsecureForm):
    name = TextField(_(u'name'), widget=partial(TextInput(), class_='input-medium', placeholder=_(u'Area')))
    technologies = SelectMultipleField(_(u'technologies'), choices=TECHNOLOGIES_CHOICES,
                                       widget=partial(Select(True), **{'class': 'selectpicker', 'data-title': _(u'Technologies deployed')}))
    area = GeoJSONField(_('area'), widget=partial(TextArea(), class_='geoinput'))

    def validate(self, *args, **kwargs):
        r = super(CoveredArea, self).validate(*args, **kwargs)
        if bool(self.name.data) != bool(self.technologies.data):
            self._fields['name'].errors += [_(u'You must fill both fields')]
            r = False
        return r
示例#7
0
class ProjectMemberForm(ModelForm):
    class Meta:
        model = ProjectMember

    users = QuerySelectField(
        'User',
        query_factory=lambda: sorted([u for u in User.query.filter_by(role=2)],
                                     key=lambda x: x.fullname_thai),
        get_label='fullname_thai',
        allow_blank=True,
        blank_text='กรุณาเลือกนักวิจัย',
        widget=Select())
示例#8
0
class CompareForm(FlaskForm):
    """Contact form."""
    task_from = SelectMultipleField(
        "Task from",
        validators=[
            DataRequired(message="Please choose a task to compare from.")
        ],
        widget=Select(multiple=False))
    task_to = SelectField(
        "Task to",
        validators=[
            DataRequired(message="Please choose a task to compare to.")
        ])
    submit = SubmitField('Compare tasks')
示例#9
0
class _SingleChoiceQuerySelectMultipleField(IndicoQuerySelectMultipleField):
    # single-choice version of the multi select field that uses
    # a collection instead of a single value for `data`
    widget = Select()

    def iter_choices(self):
        yield ('__None', self.blank_text, self.data is None)
        yield from super().iter_choices()

    def process_formdata(self, valuelist):
        # remove "no value" indicator. QuerySelectMultipleField validation
        # is broken in WTForms so it never causes a validation error to have
        # invalid data in valuelist but maybe it gets fixed at some point...
        valuelist = list(set(valuelist) - {'__None'})
        if len(valuelist) > 1:
            raise ValueError('Received more than one value')
        super().process_formdata(valuelist)
示例#10
0
class WrappedSelect(Select):
    """Widget to wrap select input in further markup."""

    wrapper = '<div>%(field)s</div>'
    wrapped_widget = Select()

    def __init__(self, widget=None, wrapper=None, **kwargs):
        """Initialize wrapped input with widget and wrapper."""
        self.wrapped_widget = widget or self.wrapped_widget
        self.wrapper_args = kwargs
        if wrapper is not None:
            self.wrapper = wrapper

    def __call__(self, field, **kwargs):
        """Render wrapped input."""
        return HTMLString(self.wrapper % dict(
            field=self.wrapped_widget(field, **kwargs), **self.wrapper_args))
示例#11
0
class PlacementForm(Form):
    component = HiddenField()
    name = StringField("Name",[validators.required()],
                       #widget=StaticIfExists(),
                       render_kw={'class':'form-control'})
    cls = SelectField("Type", [validators.required()],
                      choices=[(d,d) for d in ('Component','Assembly')],
                      widget=StaticIfExists(Select()),
                      render_kw={'class':'form-control'})
    weight = NumericField("Quantity", [validators.required()] ,
                          render_kw={'size':1, 'class':'form-control'})
    querymod = JSONField("Querymod")
    #edit = StaticField("Edit", default="link goes here");
    #override BaseForm process to restructure placements
    class _FakePlacement(object):
        def __init__(self, placement):
            self.component = (placement.component.id
                              if hasattr(placement.component,'id')
                              else placement.component)
            self.name = placement.name
            self.cls = (type(placement.component).__name__
                        if self.component else None)
            self.weight = placement.weight
            self.querymod = placement.querymod

    def process(self, formdata=None, obj=None, data=None, **kwargs):
        if isinstance(obj, component.Placement):
            obj = self._FakePlacement(obj)
        super().process(formdata=formdata, obj=obj, data=data, **kwargs)

    #override populate_obj to make new component if necessary
    def populate_obj(self, obj):
        comp = self.component.data
        if not comp or comp == str(None):
            comp = component.buildcomponentfromdict({
                '__class__': self.cls.data,
                'name': self.name.data
            })
        obj.component = comp
        obj.name = self.name.data
        obj.weight = self.weight.data
        obj.querymod = self.querymod.data
示例#12
0
class Many2manyField(Field):
    widget = Select(multiple=True)

    def __init__(self, label, model, validators=None, **kwargs):
        self.model = model
        # fixme
        self.available_records = self.model.query.all()
        super(Many2manyField, self).__init__(label=label,
                                             validators=validators,
                                             **kwargs)

    def iter_choices(self):
        for record in self.available_records:
            selected = self.data is not None and record in self.data
            yield (record, record.name, selected)

    def _value(self):
        return list(map(self.model.name_get, self.data))

    def process_data(self, value):
        try:
            self.data = list(map(self.model.name_get, value))
        except (ValueError, TypeError):
            self.data = None

    def process_formdata(self, valuelist):
        self.data = list(map(self.model.name_get, valuelist))
        if not all(self.data):
            raise ValueError(
                self.gettext(
                    'Invalid choice(s): one or more data inputs could not be coerced'
                ))

    def pre_validate(self, form):
        if self.data:
            for d in self.data:
                if not d:
                    raise ValueError(
                        self.gettext(
                            "'%(value)s' is not a valid choice for this field")
                        % dict(value=d))
示例#13
0
class RegisterStep2Form(ModelForm):
    class Meta:  #pylint: disable=no-init,missing-docstring,old-style-class,too-few-public-methods
        model = User
        only = ['position', 'organization', 'country']

    @classmethod
    def is_not_empty(cls, user):
        '''
        Returns whether or not the user has filled out any of the
        fields in the form. Used to determine whether to skip past
        this form when resuming the registration process.
        '''

        for attr in cls.Meta.only:
            if getattr(user, attr):
                return True
        return False

    expertise_domain_names = CallableChoicesSelectMultipleField(
        label=lazy_gettext('Fields of Work'),
        widget=Select(multiple=True),
        choices=lambda: [(v, lazy_gettext(v))
                         for v in current_app.config['DOMAINS']])
示例#14
0
文件: enums.py 项目: vintas/indico
class IndicoEnumSelectField(_EnumFieldMixin, SelectFieldBase):
    """Select field backed by a :class:`RichEnum`."""

    widget = Select()

    def __init__(self,
                 label=None,
                 validators=None,
                 enum=None,
                 sorted=False,
                 only=None,
                 skip=None,
                 none=None,
                 titles=None,
                 keep_enum=True,
                 **kwargs):
        super(IndicoEnumSelectField, self).__init__(label, validators,
                                                    **kwargs)
        self.enum = enum
        self.sorted = sorted
        self.only = set(only) if only is not None else None
        self.skip = set(skip or set())
        self.none = none
        self.keep_enum = keep_enum
        self.titles = titles

    def iter_choices(self):
        items = (
            x for x in self.enum
            if x not in self.skip and (self.only is None or x in self.only))
        if self.sorted:
            items = sorted(items, key=attrgetter('title'))
        if self.none is not None:
            yield ('__None', self.none, self.data is None)
        for item in items:
            title = item.title if self.titles is None else self.titles[item]
            yield (item.name, title, item == self.data)
示例#15
0
class ArtistSelect(Form):
    artist_display = SelectField('artist_options',
                                 coerce=int,
                                 option_widget=Select(multiple=False))
    confirm_button = SubmitField("Add!")
class LoginForm(Form):
	"""General Login Form"""
	school = AllSchoolsData(u'Choose School', widget=Select())
	password = PasswordField(u'Password', widget=PasswordInput(), validators=[validators.input_required(message='Please input password')]) 
class AdminStandardCreate(Form):
	school  = AllSchoolsData(u'Choose School', widget=Select())
	year = SelectField(u'Year', widget=Select(), choices=YEARS)
	filename = StringField(u'Cloud Storage Filename or Filename', widget=TextInput())
示例#18
0
class KeyPropertyMultiField(KeyPropertyField):
    """Multi choice `KeyPropertyField`."""

    widget = Select(multiple=True)
    reference_class = None

    def __init__(self, *args, **kwargs):
        """Set reference_class."""
        super(KeyPropertyMultiField, self).__init__(*args, **kwargs)
        self.reference_class = kwargs.get('reference_class')

    def iter_choices(self):
        """Iterate on field choices.

        Yield:
            (Key, str, bool) -- Entity key, label, field data exists
        """
        for obj in self.query:
            key = str(obj.key.id())
            label = self.get_label(obj)
            yield (key, label, (obj.key in self.data) if self.data else False)

    def pre_validate(self, form):
        """Pre-validate keys data."""
        if self.data is not None:
            choices = [entity.key for entity in self.query]
            for value in self.data:
                if hasattr(value, 'key') and value.key in choices:
                    pass
                elif value in choices:
                    pass
                else:
                    raise ValueError(self.gettext('Not a valid choice'))
        elif not self.allow_blank:
            raise ValueError(self.gettext('Not a valid choice'))

    def populate_obj(self, obj, name):
        """Populate `obj.<name>` with the field's data.

        Note:
            This is a destructive operation. If `obj.<name>` already exists, it
            will be overridden. Use with caution.
        """
        if self.data is not None:
            values = self.data if hasattr(self.data,
                                          '__iter__') else [self.data]
        else:
            values = []
        try:
            setattr(obj, name, [value.key for value in values])
        except AttributeError:
            setattr(obj, name, values)

    def process_formdata(self, valuelist):
        """Process data received over the wire from a form.

        This will be called during form construction with data supplied
        through the `formdata` argument.

        Args:
            valuelist -- (list) A list of strings to process.
        """
        if valuelist:
            self._data = None
            self._formdata = valuelist

    def _get_data(self):
        if self._formdata is not None:
            try:
                data = [
                    ndb.Key(self.reference_class, int(key_id))
                    for key_id in self._formdata
                ]
            except (TypeError, ValueError):
                data = [
                    ndb.Key(self.reference_class, key_id)
                    for key_id in self._formdata
                ]
            self._set_data(data)
        return self._data

    def _set_data(self, data):
        self._data = data
        self._formdata = None

    data = property(_get_data, _set_data)
class StaffToUsersForm(Form):
	school  = AllSchoolsData(u'Choose School', widget=Select())
	year = SelectField(u'Year', widget=Select(), choices=YEARS)
class CodeForm(Form):
	school = AllSchoolsData(u'School', widget=Select())
	code = StringField(u'Code', widget=TextInput())