示例#1
0
 def validate(self, form, extra_validators=tuple()):
     self.errors = []
     success = True
     field = HiddenField(validators=self.validators, _form=form,
                         _name='item')
     if self.data is None:
         self.data = []
     for value in self.data:
         field.data = value
         if not field.validate(form, extra_validators):
             success = False
             self.errors.extend(field.errors)
     return success
示例#2
0
class EmailEventPersonsForm(IndicoForm):
    from_address = SelectField(_('From'), [DataRequired()])
    subject = StringField(_('Subject'), [DataRequired()])
    body = TextAreaField(_('Email body'), [DataRequired()],
                         widget=CKEditorWidget(simple=True, images=True))
    recipients = IndicoEmailRecipientsField(_('Recipients'))
    copy_for_sender = BooleanField(
        _('Send copy to me'),
        widget=SwitchWidget(),
        description=_('Send copy of each email to my mailbox'))
    person_id = HiddenFieldList()
    user_id = HiddenFieldList()
    submitted = HiddenField()

    def __init__(self, *args, **kwargs):
        register_link = kwargs.pop('register_link')
        event = kwargs.pop('event')
        super(EmailEventPersonsForm, self).__init__(*args, **kwargs)
        self.from_address.choices = event.get_allowed_sender_emails().items()
        self.body.description = render_placeholder_info(
            'event-persons-email',
            event=None,
            person=None,
            register_link=register_link)

    def is_submitted(self):
        return super(EmailEventPersonsForm,
                     self).is_submitted() and 'submitted' in request.form
示例#3
0
文件: forms.py 项目: t73fde/grpy
class LoginForm(FlaskForm):  # pylint: disable=too-few-public-methods
    """Login data."""

    ident = StringField("Identifier", [DataRequired(), Length(max=1000)])
    password = PasswordField("Password", [DataRequired(), Length(max=1000)])
    next_url = HiddenField()
    submit_login = SubmitField("Login")
示例#4
0
文件: forms.py 项目: pmart123/indico
class BulkAbstractJudgmentForm(AbstractJudgmentFormBase):
    judgment = HiddenEnumField(enum=AbstractAction,
                               skip={AbstractAction.change_tracks})
    abstract_id = HiddenFieldList()
    submitted = HiddenField()

    def __init__(self, *args, **kwargs):
        self.event = kwargs.pop('event')
        super(BulkAbstractJudgmentForm, self).__init__(*args, **kwargs)
        self.duplicate_of.excluded_abstract_ids = set(kwargs['abstract_id'])
        self.merged_into.excluded_abstract_ids = set(kwargs['abstract_id'])
        if kwargs['judgment']:
            self._remove_unused_fields(kwargs['judgment'])

    def _remove_unused_fields(self, judgment):
        for field in list(self):
            validator = next(
                (v for v in field.validators
                 if isinstance(v, HiddenUnless) and v.field == 'judgment'),
                None)
            if validator is None:
                continue
            if not any(v.name == judgment for v in validator.value):
                delattr(self, field.name)

    def is_submitted(self):
        return super(BulkAbstractJudgmentForm,
                     self).is_submitted() and 'submitted' in request.form
示例#5
0
class EmailEventPersonsForm(IndicoForm):
    from_address = SelectField(_('From'), [DataRequired()])
    subject = StringField(_('Subject'), [DataRequired()])
    body = TextAreaField(_('Email body'), [DataRequired()],
                         widget=CKEditorWidget(simple=True))
    recipients = IndicoEmailRecipientsField(_('Recipients'))
    copy_for_sender = BooleanField(
        _('Send copy to me'),
        widget=SwitchWidget(),
        description=_('Send copy of each email to my mailbox'))
    person_id = HiddenFieldList()
    user_id = HiddenFieldList()
    submitted = HiddenField()

    def __init__(self, *args, **kwargs):
        register_link = kwargs.pop('register_link')
        super(EmailEventPersonsForm, self).__init__(*args, **kwargs)
        from_addresses = [
            '{} <{}>'.format(session.user.full_name, email)
            for email in sorted(session.user.all_emails,
                                key=lambda x: x != session.user.email)
        ]
        self.from_address.choices = zip(from_addresses, from_addresses)
        self.body.description = render_placeholder_info(
            'event-persons-email',
            event=None,
            person=None,
            register_link=register_link)

    def is_submitted(self):
        return super(EmailEventPersonsForm,
                     self).is_submitted() and 'submitted' in request.form
示例#6
0
class ReauthForm(Form):
    next = HiddenField()
    password = PasswordField(
        u'Password',
        [DataRequired(),
         Length(PASSWORD_LEN_MIN, PASSWORD_LEN_MAX)])
    submit = SubmitField('Reauthenticate')
示例#7
0
class InvitationForm(IndicoForm):
    from_address = SelectField(_('From'), [DataRequired()])
    subject = StringField(_('Subject'), [DataRequired()])
    body = TextAreaField(_('Email body'), [DataRequired()],
                         widget=CKEditorWidget(simple=True))
    recipients = EmailListField(_('Recipients'), [DataRequired()],
                                description=_('One email address per line.'))
    copy_for_sender = BooleanField(_('Send copy to me'), widget=SwitchWidget())
    submitted = HiddenField()

    def __init__(self, *args, **kwargs):
        event = kwargs.pop('event')
        super(InvitationForm, self).__init__(*args, **kwargs)
        self.from_address.choices = event.get_allowed_sender_emails().items()
        self.body.description = render_placeholder_info('survey-link-email',
                                                        event=None,
                                                        survey=None)

    def is_submitted(self):
        return super(InvitationForm,
                     self).is_submitted() and 'submitted' in request.form

    def validate_body(self, field):
        missing = get_missing_placeholders('survey-link-email',
                                           field.data,
                                           event=None,
                                           survey=None)
        if missing:
            raise ValidationError(
                _('Missing placeholders: {}').format(', '.join(missing)))
示例#8
0
class AddChecklistItemForm(Form):
    item_text = StringField(
        'Checklist Item', validators=[InputRequired(),
                                      Length(1, 64)])
    date = DateField('Deadline', format='%Y-%m-%d', validators=[Optional()])
    assignee_ids = HiddenField('Assignee Ids')
    submit = SubmitField('Add checklist item')
示例#9
0
class PromptSearchByWord(FlaskForm):
    type = HiddenField(default="word")
    query = SearchField(
        "Word search",
        validators=[InputRequired()],
        render_kw={"placeholder": "braid"},
    )
示例#10
0
class ListForm(FlaskForm):
    id = HiddenField()
    test = HiddenListIntegerField()
    date = DateField(validators=[Required()], description="Date of purchase")
    price = DecimalField(validators=[Required()], description="Total price")

    shop = QuerySelectField(
        validators=[Required()],
        query_factory=lambda: Shop.query.order_by(Shop.name),
        get_label='name',
        allow_blank=True,
        blank_text="Select a Shop",
        description="Shop where purchase took place",
    )
    category = QuerySelectField(
        query_factory=lambda: Category.query.order_by(Category.name),
        get_label='name',
        allow_blank=True,
        blank_text="Select a category",
        description="Category of purchase",
    )

    user = QuerySelectField(
        query_factory=lambda: User.query.order_by(User.name),
        get_label='username',
        allow_blank=False,
        blank_text="Select an Owner",
        description="User who bought this list.",
    )

    items_obj = QuerySelectMultipleField(validators=[Required()],
                                         query_factory=lambda: Item.query,
                                         allow_blank=False,
                                         get_label=get_item_label)
示例#11
0
class UploadEvidence(FlaskForm):
    """
    For to submit evidence for a competence
    """
    file = FileField('Upload Evidence')
    #TODO edit this so 'Inactivation Request' doesn't show up as an evidence upload type
    evidence_type = QuerySelectField("What type of evidence do you want to send?",allow_blank=True, blank_text=u'-- please choose --',
                                      query_factory=lambda: s.query(EvidenceTypeRef).all(),
                                      get_label="type")  # All sections in database
    trainer = SelectField(label="Who was your trainer?")
    datecompleted = DateField('What date did you attain this evidence?',
                           format='%Y-%m-%d', default=datetime.date.today)
    datetrained = DateField('What date did you train?',
                     format='%Y-%m-%d', default=datetime.date.today)
    assessor = SelectField(label="Who will sign-off this evidence?")
    evidence_observation = TextAreaField(label="Evidence")
    evidence_discussion = TextAreaField(label="Evidence")
    case = StringField(label="Case")
    result = StringField(label="Result")
    fouryearstatus = RadioField("Is this evidence being submitted for a four year reassessment?",
                                choices=[(1, 'Yes'), (0, 'No')],
                                validators=[DataRequired()]
                                 )
    assid = HiddenField("AssesmentID")
    submit = SubmitField('Submit Evidence')
示例#12
0
文件: forms.py 项目: zgoda/bip
class AttachmentCreateForm(BaseForm):
    op = HiddenField(default='add')
    file = FileField('plik załącznika', validators=[FileRequired()])
    title = StringField('tytuł')
    description = TextAreaField('opis')

    def save(self, page: Page) -> Attachment:
        obj = Attachment(page=page)
        file_storage = self.file.data
        filename = secure_filename(file_storage.filename)
        root, _ = os.path.splitext(filename)
        obj.title = self.title.data or root
        obj.description = self.description.data
        if obj.description:
            obj.description_html = markdown(obj.description)
        target_dir = os.path.join(
            current_app.instance_path, current_app.config['ATTACHMENTS_DIR']
        )
        with tempfile.TemporaryDirectory() as tmpdir:
            temp_filename = os.path.join(tmpdir, filename)
            file_storage.save(temp_filename)
            with db.atomic():
                file_data = process_incoming_file(temp_filename, target_dir)
                obj.filename = file_data.filename
                obj.file_type = file_data.file_type
                obj.file_size = file_data.file_size
                obj.save()
                ChangeRecord.log_change(
                    page=page, change_type=Change.updated, user=current_user,
                    description=f'dodano załącznik {obj.title}',
                )
        return obj
示例#13
0
 class PhotoForm(Form):
     id = IntegerField()
     name = StringField()
     amount = IntegerField()
     size = StringField()
     image = HiddenField()
     image_file = FileField('Image file')
示例#14
0
class AdvancedSearchForm(Form):
    """Replacement for the 'classic' advanced search interface."""

    # pylint: disable=too-few-public-methods

    advanced = HiddenField('Advanced', default=1)
    """Used to indicate whether the form should be shown."""

    terms = FieldList(FormField(FieldForm), min_entries=1)
    classification = FormField(ClassificationForm)
    date = FormField(DateForm)
    size = SelectField('results per page',
                       default=50,
                       choices=[('25', '25'), ('50', '50'), ('100', '100'),
                                ('200', '200')])
    order = SelectField(
        'Sort results by',
        choices=[('-announced_date_first', 'Announcement date (newest first)'),
                 ('announced_date_first', 'Announcement date (oldest first)'),
                 ('-submitted_date', 'Submission date (newest first)'),
                 ('submitted_date', 'Submission date (oldest first)'),
                 ('', 'Relevance')],
        validators=[validators.Optional()],
        default='-announced_date_first')
    include_older_versions = BooleanField('Include older versions of papers')

    HIDE_ABSTRACTS = 'hide'
    SHOW_ABSTRACTS = 'show'

    abstracts = RadioField('Abstracts',
                           choices=[(SHOW_ABSTRACTS, 'Show abstracts'),
                                    (HIDE_ABSTRACTS, 'Hide abstracts')],
                           default=SHOW_ABSTRACTS)
示例#15
0
文件: forms.py 项目: omh/yoshimi
class ConflictPreventionForm(CsrfForm):
    """Implements content conflict prevention to stop two people overwriting
    each other changes.

    This form detects the case where user A loads up this form and makes some
    changes while user B simultaneously loads up the same form and makes some
    other changes and saves them before user A.
    """
    cp_token = HiddenField(
        'Content conflict',
        validators=[
            DataRequired(message="The Content Changes Token is missing"),
        ])

    def process(self, formdata=None, obj=None, **kwargs):
        super(ConflictPreventionForm, self).process(formdata, obj, **kwargs)

        self._cp_hash = self._object_hash(obj)
        if not formdata:
            self.cp_token.data = self._object_hash(obj)

    def validate_cp_token(form, cp_token):
        if not form._cp_hash == cp_token.data:
            raise ValidationError(
                "Could not save as the content has become outdated. "
                "The content has changed since this page was "
                "initially loaded.")

    def _object_hash(self, obj):
        props = vars(obj)
        fields = {k: v for k, v in props.items() if k in self._fields}

        return hashlib.md5(pickle.dumps(fields)).hexdigest()
示例#16
0
class SeedSubgraphForm(FlaskForm):
    """Builds the form for seeding by sub-graph."""

    node_list = HiddenField('Nodes')
    seed_method = RadioField(
        'Expansion Method',
        choices=[
            (SEED_TYPE_NEIGHBORS,
             'Induce a subgraph over the given nodes and expand to their first neighbors'
             ),
            (SEED_TYPE_DOUBLE_NEIGHBORS,
             'Induce a subgraph over the given nodes and expand to their second neighbors'
             ),
            (SEED_TYPE_PATHS,
             'Induce a subgraph over the nodes in all shortest paths between the given nodes'
             ),
            (SEED_TYPE_UPSTREAM,
             'Induce over upstream causal neighbors (2 layers)'),
            (SEED_TYPE_DOWNSTREAM,
             'Induce over downstream causal neighbors (2 layers)'),
            (SEED_TYPE_INDUCTION,
             'Only induce a subgraph over the given nodes'),
        ],
        default=SEED_TYPE_NEIGHBORS,
    )
    filter_pathologies = BooleanField('Filter pathology nodes', default=False)
    submit_subgraph = SubmitField('Submit Subgraph')
示例#17
0
class FuncKeyTemplateKeysForm(BaseForm):
    id = HiddenField()
    label = StringField(l_('Label'), [Length(max=128)])
    digit = IntegerField(validators=[InputRequired()])
    destination = FuncKeyDestinationField()
    blf = BooleanField(l_('BLF'), default=False)
    submit = SubmitField()
示例#18
0
class UserCreationForm(BaseForm):
    name = StringField(_l('Name'), validators=[DataRequired()])
    email = EmailField(_l('Email'), validators=[DataRequired()])
    password = PasswordField(_l('Password'), validators=[DataRequired()])
    avatar = FileField(_l('Avatar'),
                       render_kw={
                           'accept': 'image/png, image/jpeg, image/jpg',
                           'onchange': 'loadImage(this)'
                       })
    hidden_img = HiddenField(validators=[DataRequired()])

    def validate_email(self, field):
        email = field.data.lower()
        user = User.query.filter_by(email=email).first()
        if user:
            raise StopValidation(_l('Email has been registered.'))

    def signup(self):
        name = self.name.data
        email = self.email.data.lower()
        image = save_image(self.hidden_img.data)
        user = User(name=name, email=email, image_filename=image)
        user.password = self.password.data
        with db.auto_commit():
            db.session.add(user)
        login(user, True)
        return user
示例#19
0
class ChatForm(Form):
    """
    A simple Chat form.
    Will create Chat messages and may provide a Chat object, if found, to the View.
    """
    source = HiddenField('source')
    name = TextField('name', validators=[DataRequired()])
    message = TextAreaField('message', validators=[DataRequired()])

    def __init__(self, *args, **kwargs):
        """
        Register a new a Chat object via a Chat class helper
        @param args: Arguments, in order of definition in class
        @param kwargs: Keyword based Arguments, in any order
        """
        Form.__init__(self, *args, **kwargs)
        self.channel = None

    def validate(self):
        """
        Do validation of the form contents.
        @return: True if the Chat object was successfully created, or False if it was not.
        """
        rv = Form.validate(self)
        if not rv:
            flash('A required field is empty', 'error')
            return False

        message = Chat.make(self.source.data, self.name.data, self.message.data)

        if message is not None:
            return True
        else:
            return False
示例#20
0
class SignupForm(Form):
    next = HiddenField()
    email = EmailField(u'Email', [DataRequired(), Email()],
                       description=u"What's your email address?")
    password = PasswordField(
        u'Password',
        [DataRequired(),
         Length(PASSWORD_LEN_MIN, PASSWORD_LEN_MAX)],
        description=u'%s characters or more! Be tricky.' % PASSWORD_LEN_MIN)
    name = TextField(
        u'Choose your username',
        [DataRequired(),
         Length(USERNAME_LEN_MIN, USERNAME_LEN_MAX)],
        description=u"Don't worry. you can change it later.")
    agree = BooleanField(
        u'Agree to the ' +
        Markup('<a target="blank" href="/terms">Terms of Servic</a>'),
        [DataRequired()])
    submit = SubmitField('Sign up')

    def validate_name(self, field):
        if Models.User.objects(name=field.data).first() is not None:
            raise ValidationError(u'This username is taken')

    def validate_email(self, field):
        if Models.User.objects(account__email=field.data).first() is not None:
            raise ValidationError(u'This email is taken')
示例#21
0
class EnvironmentForm(Form):
    environment_id = HiddenField()
    environment_name = HiddenField()
    role = SelectField(
        environment_name,
        choices=ENV_ROLES,
        default=NO_ACCESS,
        filters=[lambda x: None if x == "None" else x],
    )

    @property
    def data(self):
        _data = super().data
        if "role" in _data and _data["role"] == NO_ACCESS:
            _data["role"] = None
        return _data
示例#22
0
class JobForm(FlaskForm):
    base_args = FormField(JobBaseForm)
    cron_trigger_args = FormField(CronForm)
    date_trigger_args = FormField(DateForm)
    interval_trigger_args = FormField(IntervalForm)
    type = HiddenField("Type")
    submit = SubmitField("Apply")

    def validate(self):
        current_app.logger.info("----------BEGIN FORM VALIDATE----------")
        results = True
        if not FlaskForm.validate(self.base_args.form):
            current_app.logger.info("Base Form Not Validate")
            results = False
        if self.base_args.trigger.data == "cron" and not self.cron_trigger_args.validate(
                self):
            current_app.logger.info("Cron Form Not Validate")
            results = False
        if self.base_args.trigger.data == "date" and not self.date_trigger_args.validate(
                self):
            current_app.logger.info("Date Form Not Validate")
            results = False
        if self.base_args.trigger.data == "interval" and not self.interval_trigger_args.validate(
                self):
            current_app.logger.info("Interval Form Not Validate")
            results = False
        current_app.logger.info("Final Results: {}".format(results))
        current_app.logger.info("----------END FORM VALIDATE----------")
        return results
示例#23
0
class TaskForm(FlaskForm):
    """
    任务表单
    """
    id = HiddenField('任务ID',
                     validators=[Length(0, 64, message='任务ID长度不超过64个字符')])
    name = StringField(
        '任务名称',
        validators=[DataRequired(),
                    Length(1, 10, message='任务名称长度不超过10个字符')])
    desc = TextAreaField('任务简述',
                         validators=[
                             DataRequired(),
                             Length(0, 1024, message='任务简述长度不超过1024个字符')
                         ],
                         render_kw={
                             'rows': '5',
                             'placeholder': '对于任务进行简要描述'
                         })
    trigger = RadioField('任务类型',
                         choices=TASK_TYPES,
                         validators=[DataRequired()],
                         default=TASK_TYPES[0][0])
    time = StringField('触发时间', validators=[DataRequired()])
    url = StringField('触发地址',
                      validators=[DataRequired(),
                                  URL(message='URL地址格式有误')])
    method = RadioField('触发方法',
                        choices=METHODS,
                        validators=[DataRequired()],
                        default=METHODS[0][1])
    submit = SubmitField("提交")
示例#24
0
class EmailRegistrantsForm(IndicoForm):
    from_address = SelectField(_("From"), [DataRequired()])
    cc_addresses = EmailListField(_("CC"),
                                  description=_("Beware, addresses in this field will receive one mail per "
                                                "registrant."))
    subject = StringField(_("Subject"), [DataRequired()])
    body = TextAreaField(_("Email body"), [DataRequired()], widget=CKEditorWidget(simple=True))
    recipients = IndicoEmailRecipientsField(_('Recipients'))
    copy_for_sender = BooleanField(_('Send copy to me'), widget=SwitchWidget(),
                                   description=_('Send copy of each email to my mailbox'))
    attach_ticket = BooleanField(_('Attach ticket'), widget=SwitchWidget(),
                                 description=_('Attach tickets to emails'))
    registration_id = HiddenFieldList()
    submitted = HiddenField()

    def __init__(self, *args, **kwargs):
        self.regform = kwargs.pop('regform')
        event = self.regform.event
        super(EmailRegistrantsForm, self).__init__(*args, **kwargs)
        self.from_address.choices = event.get_allowed_sender_emails().items()
        self.body.description = render_placeholder_info('registration-email', regform=self.regform, registration=None)

    def validate_body(self, field):
        missing = get_missing_placeholders('registration-email', field.data, regform=self.regform, registration=None)
        if missing:
            raise ValidationError(_('Missing placeholders: {}').format(', '.join(missing)))

    def is_submitted(self):
        return super(EmailRegistrantsForm, self).is_submitted() and 'submitted' in request.form
示例#25
0
class BadgeSettingsForm(IndicoForm):
    template = SelectField(_('Template'))
    save_values = BooleanField(_("Save values for next time"), widget=SwitchWidget(),
                               description=_("Save these values in the event settings"))
    dashed_border = BooleanField(_("Dashed border around each badge"), widget=SwitchWidget(),
                                 description=_("Display a dashed border around each badge"))
    page_size = IndicoEnumSelectField(_('Page size'), enum=PageSize, sorted=True)
    page_orientation = IndicoEnumSelectField(_('Page orientation'), enum=PageOrientation)
    page_layout = IndicoEnumSelectField(_('Page layout'), enum=PageLayout,
                                        description=_('The single sided (foldable) option is only available if the '
                                                      'template orientation is the same as the page orientation and '
                                                      'its width is exactly half of the page width'))

    top_margin = FloatField(_('Top margin'), [InputRequired()])
    left_margin = FloatField(_('Left margin'), [InputRequired()])
    right_margin = FloatField(_('Right margin'), [InputRequired()])
    bottom_margin = FloatField(_('Bottom margin'), [InputRequired()])
    margin_columns = FloatField(_('Margin between columns'), [InputRequired()])
    margin_rows = FloatField(_('Margin between rows'), [InputRequired()])

    submitted = HiddenField()

    def __init__(self, event, **kwargs):
        all_templates = set(event.designer_templates) | get_inherited_templates(event)
        badge_templates = [tpl for tpl in all_templates if tpl.type.name == 'badge']
        tickets = kwargs.pop('tickets')
        super(BadgeSettingsForm, self).__init__(**kwargs)
        self.template.choices = sorted(((unicode(tpl.id), tpl.title)
                                        for tpl in badge_templates
                                        if tpl.is_ticket == tickets),
                                       key=itemgetter(1))

    def is_submitted(self):
        return super(BadgeSettingsForm, self).is_submitted() and 'submitted' in request.form
示例#26
0
class FavoritesNewForm(Form):
    """
    新建 Favorites 的表单
    """

    title = TextField(_("favorites.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=1,
                                 max=100,
                                 message=_("Length range: 1 - 100"))
                      ])

    tags = TextField(_("favorites.tags"),
                     description=u'标签',
                     validators=[
                         length(min=1,
                                max=512,
                                message=_("Length range: 1 - 512"))
                     ])

    description = TextField(_("favorites.description"),
                            description=u'描述',
                            validators=[
                                required(message=_("description is required")),
                            ])

    next = HiddenField()

    submit = SubmitField(_("Submit"))
示例#27
0
class BlastPromoForm(FlaskForm):
    first_name = StringField(
        u"First name", [validators.required(message="Your first name is required.")]
    )
    last_name = StringField(
        u"Last name", [validators.required(message="Your last name is required.")]
    )
    subscriber_email = EmailField(
        "Subscriber Email address", [validators.DataRequired(), validators.Email()]
    )
    installment_period = HiddenField(u"Installment Period")
    campaign_id = HiddenField("Campaign ID")
    referral_id = HiddenField("Referral ID")
    description = HiddenField(u"Description")
    pay_fees = BooleanField(u"Agree to pay fees")
    pay_fees_value = HiddenField(u"Pay Fees Value")
示例#28
0
class SplitCategoryForm(IndicoForm):
    first_category = StringField(
        _('Category name #1'), [DataRequired()],
        description=_(
            'Selected events will be moved into a new sub-category with this '
            'title.'))
    second_category = StringField(
        _('Category name #2'),
        description=
        _('Events that were not selected will be moved into a new sub-category '
          'with this title. If omitted, those events will remain in the current '
          'category.'))
    event_id = HiddenFieldList()
    all_selected = BooleanField(widget=HiddenCheckbox())
    submitted = HiddenField()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.all_selected.data:
            self.event_id.data = []
            self.first_category.label.text = _('Category name')
            self.first_category.description = _(
                'The events will be moved into a new sub-category with this title.'
            )
            del self.second_category

    def is_submitted(self):
        return super().is_submitted() and 'submitted' in request.form
示例#29
0
class BookingForm(Form):
    clientName = StringField('Вас зовут',
                             validators=[validators.input_required()])
    clientPhone = StringField('Ваш телефон',
                              validators=[validators.input_required()])
    clientWeekday = HiddenField()
    clientTime = HiddenField()
    clientTeacher = HiddenField()

    def save(self):
        with open("db/booking.json", "r+") as f:
            booking = load(f)
            booking[str(self.clientTeacher.data)][self.clientWeekday.data][
                self.clientTime.data] = False
            f.seek(0)
            f.write(dumps(booking))
class ContractMetadataForm(FlaskForm):
    '''Edit a contract's metadata during the renewal process

    Attributes:
        financial_id: The
            :py:class:`~purchasing.data.contracts.ContractBase`
            financial_id
        spec_number: The spec number for a contrat. See
            :py:meth:`~purchasing.data.contracts.ContractBase.get_spec_number`
            for more information about spec numbers
        department: The :py:class:`~purchasing.users.models.Department` to set
            for the contract
        all_blank: Placeholder to indicate if all other fields are blank
    '''
    financial_id = IntegerField(validators=[Optional()])
    spec_number = TextField(validators=[Optional()],
                            filters=[lambda x: x or None])
    department = QuerySelectField(query_factory=Department.query_factory,
                                  get_pk=lambda i: i.id,
                                  get_label=lambda i: i.name,
                                  allow_blank=True,
                                  blank_text='-----')
    all_blank = HiddenField(validators=[not_all_hidden])

    def post_validate_action(self, action, contract, current_stage):
        '''Update the contract's metadata

        Arguments:
            action: A
                :py:class:`~purchasing.data.contract_stages.ContractStageActionItem`
                that needs to be updated with details for the action
                log
            contract: A :py:class:`~purchasing.data.contracts.ContractBase` object
            current_stage: The current
                :py:class:`~purchasing.data.contract_stages.ContractStage`

        Returns:
            The modified
            :py:class:`~purchasing.data.contract_stages.ContractStageActionItem`
            with the action detail updated to include the form's data
        '''
        current_app.logger.info(
            'CONDUCTOR UPDATE METADATA | Contract update metadata on stage "{}" from contract "{}" (ID: {})'
            .format(current_stage.name, contract.description, contract.id))

        # remove the blank hidden field -- we don't need it
        data = self.data
        del data['all_blank']

        contract.update_with_spec_number(data)
        # this process pops off the spec number, so get it back
        data['spec_number'] = self.data.get('spec_number')

        # get department
        if self.data.get('department', None):
            data['department'] = self.data.get('department').name

        action.action_detail = data

        return action
示例#31
0
class LocalCredentialsForm(FlaskForm):
    """Local credentials form, on a per device basis."""

    local_creds_used = HiddenField('LocalCredsUsed')
    user = StringField('Username', validators=[DataRequired()])
    pw = PasswordField('Login Password', validators=[DataRequired()])
    privpw = PasswordField('Privileged Password (if applicable)')