class DateTimeWithNumRunsForm(FlaskForm): # Date time and number of runs form for tree view, task duration # and landing times base_date = DateTimeField("Anchor date", widget=DateTimePickerWidget(), default=timezone.utcnow()) num_runs = SelectField("Number of runs", default=25, choices=( (5, "5"), (25, "25"), (50, "50"), (100, "100"), (365, "365"), ))
class UserForm(ModelForm): """ Form used to manage users. """ class Meta: model = User display_hash = TextField(validators=[Optional()], widget=widgets.HiddenInput()) date_created = DateTimeField(validators=[Optional()]) def populated_object(self): """ Returns a new model object populated with the form values. """ user = User() self.populate_obj(user) return user
class UpdateProfileForm(FlaskForm): def __init__(self, *args, **kwargs): super(UpdateProfileForm, self).__init__(*args, **kwargs) email = StringField( label="email", validators=[Email(), Length(1, 64)], ) password = PasswordField( label="password", validators=[ Length(0, 64), ], ) name = StringField(label="name", validators=[ Length(0, 64), ]) family = StringField(label="family", validators=[ Length(0, 64), ]) username = StringField(label="username", validators=[ Length(0, 64), ]) photo = FileField(label="profile picture") role = SelectField(label="role", validate_choice=False) location = StringField(label="location") about_me = StringField(label="describe your self", widget=TextArea(), validators=[ Length(0, 256), ]) last_seen = DateTimeField(label="last seen") submit = SubmitField(label="Update", ) def load_data(self, ): self.role.choices = [(role, role) for i, role in enumerate(Role.query.all())] self.role.default = current_user.role self.process() self.email.data = current_user.email self.name.data = current_user.name self.family.data = current_user.family self.username.data = current_user.username self.photo.data = current_user.photo self.location.data = current_user.location self.about_me.data = current_user.about_me self.last_seen.data = current_user.last_seen
class PostForm(FlaskForm): slug = TextField('Slug') title = TextField('Title', [InputRequired()]) subtitle = TextField('Subtitle') desc = TextField('Description', [InputRequired()]) body = TextAreaField('Body') tags = TextField('Tags') redirect = URLField('Redirect URL') published = BooleanField('Published') published_at = DateTimeField('Published At', [InputRequired()], format='%Y-%m-%d %H:%M') print_only = BooleanField('Print Only') authors = QuerySelectMultipleField('Authors', query_factory=lambda: Author.query.all(), get_label='name') issue = QuerySelectField('Issue', query_factory=lambda: Issue.query.all(), get_label='name') image = QuerySelectField('Image', query_factory=lambda: Media.query.all(), get_label='desc')
class SignupForm(FlaskForm): AVAILABLE_STATUSES = [(SubscriberUser.Status.NOT_ACTIVE, 'Not active'), (SubscriberUser.Status.ACTIVE, 'Active'), (SubscriberUser.Status.TRIAL_FINISHED, 'Trial finished'), (SubscriberUser.Status.BANNED, 'Banned')] email = StringField(lazy_gettext(u'Email:'), validators=[ InputRequired(), Email(message=lazy_gettext(u'Invalid email')), Length(max=30) ]) password = PasswordField( lazy_gettext(u'Password:'******'Country:'), coerce=str, validators=[InputRequired()], choices=constants.AVAILABLE_COUNTRIES) language = SelectField(lazy_gettext(u'Language:'), coerce=str, default=constants.DEFAULT_LOCALE, choices=constants.AVAILABLE_LOCALES_PAIRS) status = SelectField(lazy_gettext(u'Status:'), coerce=SubscriberUser.Status.coerce, validators=[InputRequired()], choices=AVAILABLE_STATUSES) exp_date = DateTimeField(default=SubscriberUser.MAX_DATE) apply = SubmitField(lazy_gettext(u'Sign Up')) def make_entry(self) -> SubscriberUser: return self.update_entry(SubscriberUser()) def update_entry(self, subscriber: SubscriberUser) -> SubscriberUser: subscriber.email = self.email.data subscriber.password = SubscriberUser.make_md5_hash_from_password( self.password.data) subscriber.country = self.country.data subscriber.language = self.language.data subscriber.status = self.status.data subscriber.exp_date = self.exp_date.data return subscriber
class VodBaseStreamForm: AVAILABLE_VOD_TYPES = [(constants.VodType.VODS, 'VODS'), (constants.VodType.SERIES, 'SERIES')] vod_type = SelectField(lazy_gettext(u'Vod type:'), validators=[InputRequired()], choices=AVAILABLE_VOD_TYPES, coerce=constants.VodType.coerce) description = StringField(lazy_gettext(u'Description:'), validators=[]) preview_icon = StringField(lazy_gettext(u'Preview:'), validators=[ InputRequired(), Length(min=constants.MIN_URL_LENGTH, max=constants.MAX_URL_LENGTH) ]) trailer_url = StringField(lazy_gettext(u'Trailer URL:'), validators=[ InputRequired(), Length(min=constants.MIN_URL_LENGTH, max=constants.MAX_URL_LENGTH) ]) user_score = FloatField( lazy_gettext(u'User score:'), validators=[InputRequired(), NumberRange(min=0, max=100)]) prime_date = DateTimeField(lazy_gettext(u'Prime time:'), validators=[InputRequired()], default=VodBasedStream.MIN_DATE) country = StringField(lazy_gettext(u'Country:'), validators=[ InputRequired(), Length(min=constants.MIN_COUNTRY_LENGTH, max=constants.MAX_COUNTRY_LENGTH) ]) duration = IntegerField(lazy_gettext(u'Duration in (msec):'), validators=[ InputRequired(), NumberRange( min=0, max=VodBasedStream.MAX_DURATION_MSEC) ])
class JamDetailsForm(Form): title = TextField("Title", validators=[Required(), Length(max=128)]) theme = TextField("Theme", validators=[Length(max=128)]) team_limit = IntegerField("Team size limit", validators=[NumberRange(min=0)]) start_time = DateTimeField("Start time", format="%Y-%m-%d %H:%M", validators=[Required()]) registration_duration = IntegerField("Registration duration", validators=[ Required(), NumberRange(min=0), ], default=14 * 24) packaging_duration = IntegerField("Packaging duration", validators=[ Required(), NumberRange(min=0), ], default=24) rating_duration = IntegerField("Rating duration", validators=[ Required(), NumberRange(min=0), ], default=24 * 5) duration = IntegerField("Duration", validators=[ Required(), NumberRange(min=0), ], default=24 * 2) description = TextAreaField("Description") restrictions = TextAreaField("Restrictions")
class ShowForm(FlaskForm): artist_id = StringField('artist_id', validators=[DataRequired()]) venue_id = StringField('venue_id', validators=[DataRequired()]) start_time = DateTimeField('start_time', validators=[DataRequired()], default=datetime.today())
class DateTimeForm(Form): DateTime = DateTimeField(id='res_datetime')
class RegisterForm(FlaskForm): username = StringField( label="用户名", validators=[ InputRequired(message="请输入用户名!") ], description="用户名", render_kw={ "class": "form-control", "placeholder": "请输入用户名!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) sex = RadioField( label="性别", choices=(('0', '男'), ('1', '女')), description="性别", render_kw={ "class": "form-control", "placeholder": "请选择性别!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", }, ) pwd = PasswordField( label="密码", validators=[InputRequired(message="请输入密码!")], description="密码", render_kw={ "class": "form-control", "placeholder": "请输入密码!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) repwd = PasswordField( label="确认密码", validators=[InputRequired(message="请输入确认密码!"), EqualTo('pwd', message="两次密码不一致!")], description="确认密码", render_kw={ "class": "form-control", "placeholder": "请输入确认密码!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) email = StringField( label="邮箱", validators=[InputRequired(message="请输入邮箱!"), Email(message="邮箱格式不正确!")], description="邮箱", render_kw={ "class": "form-control", "placeholder": "请输入邮箱!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) name = StringField( label="姓名", validators=[InputRequired(message="请输入姓名!")], description="姓名", render_kw={ "class": "form-control", "placeholder": "请输入姓名!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) phone = StringField( label="手机号码", validators=[InputRequired(message="请输入手机号码!"), Regexp("1[3589]\\d{9}", message="手机号码格式不正确!")], description="手机号码", render_kw={ "class": "form-control", "placeholder": "请输入手机号码!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) sid = StringField( label="学号", validators=[InputRequired(message="请输入学号!")], description="学号", render_kw={ "class": "form-control", "placeholder": "请输入学号!", "required": 'required', # 表示此项不能为空 "autofocus": "autofocus", } ) l_cls = [(cls.id, cls.name) for cls in db.session.query(Class).all()] cls = SelectField2( coerce=str, label="班级", validators=[DataRequired('请选择班级')], choices=tuple(l_cls), render_kw={ 'class': 'form-control', "placeholder": "请选择班级!", "required": 'required', # 表示此项不能为空 }, ) birthday = DateTimeField( label="生日", validators=[InputRequired(message="请选择生日!")], description="生日", render_kw={ "class": "form-control", "placeholder": "请选择生日!", "autofocus": "autofocus", } ) date_in = DateTimeField( label="入学时间", validators=[InputRequired(message="请选择入学时间!")], description="入学时间", render_kw={ "class": "form-control", "placeholder": "请选择入学时间!", "autofocus": "autofocus", } ) agree = BooleanField('是否同意服务条件和隐私策略!', [validators.InputRequired()]) def validate_name(self, field): username = field.data user = Student.query.filter_by(username=username).count() if user == 1: raise ValidationError("用户名已经存在!") def validate_email(self, field): email = field.data user = Student.query.filter_by(email=email).count() if user == 1: raise ValidationError("邮箱已经存在!") def validate_phone(self, field): phone = field.data user = Student.query.filter_by(phone=phone).count() if user == 1: raise ValidationError("手机号码已经存在!") def validate_sid(self, field): sid = field.data user = Student.query.filter_by(id=sid).count() if user == 1: raise ValidationError("学号已经存在!")
class PreferenceForm(Form): start_date = DateTimeField('start', ) end_date = DateTimeField('end', ) money = IntegerField('money', ) climate = StringField('climate', ) place = StringField('place', )
class SaleForm(Form): uuid = StringField('uu-id', default='') user_email = StringField('user email') amount = FloatField('Amount', default=0.0) date = DateTimeField('Date', format='%Y-%m-%d %H:%M') canceled = BooleanField('Canceled', default=False)
class MakeupTimeForm(FlaskForm): '''这是补班时间表单''' teacher = StringField(label='教师',render_kw={'readonly':True}) start = DateTimeField(label='起始时间',validators=[Required()],description='格式:2008-8-18 8:00:00,请以你自己所在时区为准') end = DateTimeField(label='结束时间',validators=[Required()],description='格式:2008-8-18 8:00:00,请以你自己所在时区为准') submit = SubmitField(label='提交')
class F(Form): a = DateTimeField() b = DateTimeField(format="%Y-%m-%d %H:%M")
class DocumentView(AuthModelView): class DocumentUploadField(FileUploadField): def populate_obj(self, obj, name): pass # handled by DocumentView.on_model_change def _delete_document(self, model): if model.has_file: source = document_path(model.id) if os.path.exists(source): dest = os.path.join(config.DOCUMENT_DIRECTORY, 'trash', str(model.id)) while os.path.exists(dest + '.pdf'): dest += 'lol' os.renames(source, dest + '.pdf') def on_form_prefill(self, form, id): form.form_validated.data = False doc = Document.query.get(id) if doc is not None: form.form_validated.data = doc.validated form.form_validation_time.data = doc.validation_time def delete_model(self, model): super().delete_model(model) self._delete_document(model) def on_model_change(self, form, model, is_created): if is_created: if bool(form.file.data) == form.no_file.data: raise ValidationError( 'Genau ein Feld von "Datei" oder "Keine Datei" muss angegeben werden.' ) if model.id is None: sqla.session.flush() # acquire ID if form.file.data: self._delete_document(model) # delete old file save_file(model, form.file.data) if form.form_validated.data != model.validated: # validation state changed if form.form_validated.data: model.validation_time = datetime.datetime.now() else: model.validation_time = None if model.validated and not model.has_barcode: if model.document_type != 'written': barcode.bake_barcode(model) config.document_validated(document_path(model.id)) model.has_barcode = True # this is the correct behaviour, although the has_barcode name does not indicate it super().on_model_change(form, model, is_created) list_template = 'document_list.html' # no number_of_pages, validated or submitted_by form_create_rules = [ 'document_type', 'department', 'lectures', 'examinants', 'date', 'solution', 'comment', 'file', 'no_file', 'form_validated', ] form_edit_rules = [ 'document_type', 'department', 'lectures', UnvalidatedList('lectures', 'lecture.edit_view'), 'examinants', UnvalidatedList('examinants', 'examinant.edit_view'), 'date', 'solution', 'number_of_pages', 'comment', 'submitted_by', 'file', 'form_validated', 'form_validation_time', ViewButton(), ] form_widget_args = { 'form_validation_time': { 'disabled': True, 'readonly': True, }, } form_excluded_columns = ( 'validation_time', 'has_file', 'legacy_id', 'printed_in', 'validated', 'early_document_until' ) # this isn't strictly necessary, but it shuts up a warning form_extra_fields = { 'file': DocumentUploadField(label='Datei'), 'no_file': BooleanField(label='Keine Datei'), 'form_validated': BooleanField(label='Überprüft'), 'form_validation_time': DateTimeField(label='Überprüft am'), } form_args = { 'comment': { 'validators': [Optional()] }, 'number_of_pages': { 'validators': [Optional()] }, } column_list = ('id', 'department', 'lectures', 'examinants', 'date', 'number_of_pages', 'solution', 'comment', 'document_type', 'validation_time', 'submitted_by') column_filters = ('id', 'department', 'lectures', 'examinants', 'date', 'solution', 'comment', 'document_type', 'validation_time', 'submitted_by') column_labels = { 'id': 'ID', 'department': 'Fakultät', 'lectures': 'Vorlesungen', 'examinants': 'Prüfer', 'date': 'Datum', 'number_of_pages': 'Seiten', 'solution': 'Lösung', 'comment': 'Kommentar', 'document_type': 'Typ', 'validation_time': 'Überprüft am', 'submitted_by': 'Von', } column_default_sort = ('date', True) doctype_labels = { 'oral': 'Mündl.', 'written': 'Schriftl.', 'oral reexam': 'Nachprüfung', 'mock exam': 'Probeklausur' } department_labels = { 'computer science': 'Informatik', 'mathematics': 'Mathematik', 'other': 'Andere (Ergänzungsfach)', } def format_solution(v, c, model, n): if model.document_type == 'written': return { 'official': 'Ja (offiziell)', 'inofficial': 'Ja (Studi)', 'none': 'Nein', None: '?', }[model.solution] return '' column_formatters = { 'department': lambda v, c, m, n: DocumentView.department_labels[m.department], 'document_type': lambda v, c, m, n: DocumentView.doctype_labels[m.document_type], 'solution': format_solution, 'date': _dateFormatter('date'), }
class SearchEventForm(FlaskForm): search_by_title = StringField('Search Title', validators=[Optional()]) search_by_time_start = DateTimeField('Start From Time', format='%m/%d/%Y %H:%M:%S', validators=[Optional()], default=datetime.utcnow) search_by_time_end = DateTimeField('End From Time', format='%m/%d/%Y %H:%M:%S', validators=[Optional()]) search_by_loc = StringField('Search Location', validators=[Optional()]) submit = SubmitField('Search')
class DateTimeForm(FlaskForm): # Date filter form needed for task views execution_date = DateTimeField("Execution date", widget=AirflowDateTimePickerWidget())
class report_form(FlaskForm): hora_de = DateTimeField("De", validators=[DataRequired("Campo obrigatório!")]) submit = SubmitField("Cadastrar")
class ProduceForm(FlaskForm): name = StringField(u'产品', validators=[DataRequired()]) num = IntegerField(u'数量', validators=[DataRequired()]) date = DateTimeField(u'生产日期', validators=[DataRequired()]) submit = SubmitField(u'生产')
class EventForm(FlaskForm): start = DateTimeField('Start', [InputRequired()], format='%Y-%m-%d %H:%M') end = DateTimeField('End', format='%Y-%m-%d %H:%M') ignore_time = BooleanField('Ignore time') post = FormField(EventPostForm)
class AddDeployKeyForm(FlaskForm): name = StringField('name', validators=[InputRequired(), Length(4, 32)]) expired_date = DateTimeField(format="%Y-%m-%dT%H:%M:%S.%fZ") submit_add_key = SubmitField('ADD')
class EntryEditFormOld(Form): """ 编辑 Entry 的表单 """ entry_type = SelectField( _("entry.entry_type"), default=0, description= u'类型:0-文章、1-快讯、2-代码、3-软件、4-讨论、5-问答、6-小贴士、7-图集、8-视频、9-音频、10-链接、11-引语、12-状态、13-文档、14-聊天、15-随笔', choices=[('0', _("Article")), ('1', _("News")), ('2', _("Code")), ('3', _("Software")), ('4', _("Forum")), ('5', _("Question")), ('6', _("Tips")), ('7', _("Gallery")), ('8', _("Video")), ('9', _("Audio")), ('10', _("Link")), ('11', _("Quote")), ('12', _("Status")), ('13', _("Document")), ('14', _("Chat")), ('15', _("Aside")), ('16', _("Special"))], validators=[ required(message=_("entry_type is required")), ]) title = TextField(_("entry.title"), description=u'标题', validators=[ required(message=_("title is required")), length(min=1, max=100, message=_("Length range: 1 - 100")) ]) slug = TextField( _("entry.slug"), description=u'固定地址', validators=[length(min=1, max=50, message=_("Length range: 1 - 50"))]) source_type = SelectField( _("entry.source_type"), default=0, description=u'来源类型:0-原创、1-翻译、2-转帖', choices=[('0', _("Original content")), ('1', _("Translate content")), ('2', _("Reprint content"))], validators=[ required(message=_("source_type is required")), ]) source_title = TextField(_("entry.source_title"), description=u'来源标题', validators=[ length(min=1, max=100, message=_("Length range: 1 - 100")) ]) source_url = TextField(_("entry.source_url"), description=u'来源地址', validators=[ url(message=_("source_url is not a valid URL")), length(min=11, max=200, message=_("Length range: 11 - 200")) ]) category_id = HiddenField( _("entry.category_id"), description=u'分类ID:0-未分类', validators=[ required(message=_("category_id is required")), ]) logo = TextField(_("entry.logo"), description=u'图标', validators=[ url(message=_("logo is not a valid URL")), length(min=11, max=100, message=_("Length range: 11 - 100")) ]) feature_image = TextField( _("entry.feature_image"), description=u'特色图地址', validators=[ url(message=_("feature_image is not a valid URL")), length(min=11, max=200, message=_("Length range: 11 - 200")) ]) tags = TextField(_("entry.tags"), description=u'标签', validators=[ length(min=1, max=512, message=_("Length range: 1 - 512")) ]) content = TextAreaField(_("entry.content"), description=u'内容', validators=[ required(message=_("content is required")), ]) summary = TextAreaField(_("entry.summary"), description=u'摘要', validators=[ length(min=1, max=200, message=_("Length range: 1 - 200")) ]) on_portal = SelectField(_("entry.on_portal"), default=0, choices=[('0', u'否'), ('1', u'是')], description=u'是否首页显示', validators=[ required(message=_("on_portal is required")), ]) on_top = SelectField(_("entry.on_top"), default=0, choices=[('0', u'否'), ('1', u'是')], description=u'是否置顶', validators=[ required(message=_("on_top is required")), ]) comment_status = SelectField( _("entry.comment_status"), default=0, description=u'评论状态:0-允许、1-关闭', choices=[('0', u'允许'), ('1', u'关闭')], validators=[ required(message=_("comment_status is required")), ]) entry_status = SelectField( _("entry.entry_status"), default=0, description=u'内容状态:0-草稿、1-待审、2-发布', choices=[('0', u'草稿'), ('1', u'待审'), ('2', u'发布')], validators=[ required(message=_("entry_status is required")), ]) view_status = SelectField( _("entry.view_status"), default=0, description=u'显示状态:0-公开、1-私有、2-隐藏', choices=[('0', u'公开'), ('1', u'私有'), ('2', u'隐藏')], validators=[ required(message=_("view_status is required")), ]) scores = SelectField(_("entry.scores"), default=0, description=u'分数', choices=[('0', u'未知'), ('1', u'1'), ('2', u'2'), ('3', u'2'), ('4', u'2'), ('5', u'2')], validators=[ required(message=_("scores is required")), ]) difficulty = SelectField(_("entry.difficulty"), default=0, description=u'深浅度', choices=[('0', u'容易'), ('1', u'一般'), ('2', u'难'), ('3', u'高深')], validators=[ required(message=_("difficulty is required")), ]) recommend = SelectField(_("entry.recommend"), default=0, description=u'推荐级别:0-默认(未推荐)、1-不错、2-良好、3-精华', choices=[('0', u'未推荐'), ('1', u'不错'), ('2', u'良好'), ('3', u'精华')], validators=[ required(message=_("recommend is required")), ]) principal_language = SelectField( _("entry.principal_language"), default=0, description= u'主体语言:1-Java 、 2-C/C++ 3-Objective-C 4-PHP 5-Perl 6-Python 7-Ruby 8-C# 9-.NET 10-ASP 11-D语言 12-Groovy 13-Scala 14-JavaScript 15-HTML/CSS 16-ActionScript 17-VBScript 18-Delphi/Pascal 19-Basic 20-ErLang 21-COBOL 22-Fortran 23-Lua 24-SHELL 25-Smalltalk 26-汇编 27-Sliverlight 28-Lisp 29-Google Go', choices=[('0', u'其他'), ('1', u'Java'), ('2', u'C/C++'), ('3', u'Objective-C'), ('4', u'PHP'), ('5', u'Perl'), ('6', u'Python'), ('7', u'Ruby'), ('8', u'C#'), ('9', u'.NET'), ('10', u'ASP'), ('11', u'D语言'), ('12', u'Groovy'), ('13', u'Scala'), ('14', u'JavaScript'), ('15', u'HTML/CSS'), ('16', u'ActionScript'), ('17', u'VBScript'), ('18', u'Delphi/Pascal'), ('19', u'Basic'), ('20', u'ErLang'), ('21', u'COBOL'), ('22', u'Fortran'), ('23', u'Lua'), ('24', u'SHELL'), ('25', u'Smalltalk'), ('26', u'汇编'), ('27', u'Sliverlight'), ('28', u'Lisp'), ('29', u'Google Go')], validators=[ required(message=_("recommend is required")), ]) license_agreement = SelectField( _("entry.license_agreement"), default=0, description= u'授权协议:1-GPL,2-LGPL,3-AGPL,4-Apache,5-MIT,6-BSD,7-EPL,8-MPL,0-其他', choices=[('0', u'其他'), ('1', u'GPL'), ('2', u'LGPL'), ('3', u'AGPL'), ('4', u'Apache'), ('5', u'MIT'), ('6', u'BSD'), ('7', u'EPL'), ('8', u'MPL')], validators=[ required(message=_("recommend is required")), ]) runtime_platform = SelectField( _("entry.runtime_platform"), default=0, description= u'运行平台: 1-Windows,2-Linux,3-BSD,4-UNIX,5-OS X,6-Symbian,7-J2ME,8-嵌入式,9-Android,10-iPhone/iPad/iPod,11-Windows Phone/Mobile,12-Meego,13-Moblin', choices=[('1', u'Windows'), ('2', u'Linux'), ('3', u'BSD'), ('4', u'UNIX'), ('5', u'OS X'), ('6', u'Symbian'), ('7', u'J2ME'), ('8', u'嵌入式'), ('9', u'Android'), ('10', u'iPhone/iPad/iPod'), ('11', u'Windows Phone/Mobile'), ('12', u'Meego'), ('13', u'Moblin')], validators=[ required(message=_("recommend is required")), ]) #文章排序:(置顶周期) 标题样式: scores = SelectField(_("entry.scores"), default=0, description=u'是否置顶', choices=[('0', u'否'), ('1', u'是')], validators=[ required(message=_("view_status is required")), ]) on_top_period = SelectField( _("entry.on_top_period"), default=7, description=u'置顶周期', choices=[('7', u'一周'), ('15', u'15天'), ('30', u'30天'), ('60', u'60天'), ('90', u'90天')], validators=[ required(message=_("on_top_period is required")), ]) on_portal = SelectField(_("entry.on_portal"), default=0, description=u'是否首页显示', choices=[('0', u'否'), ('1', u'是')], validators=[ required(message=_("view_status is required")), ]) on_portal_period = SelectField( _("entry.on_portal_period"), default=7, description=u'首页显示周期', choices=[('7', u'一周'), ('15', u'15天'), ('30', u'30天'), ('60', u'60天'), ('90', u'90天')], validators=[ required(message=_("on_top_period is required")), ]) #阅读权限: # 是否隐藏栏目(显示、隐藏) show_role = RadioField(_("entry.show_role"), default='0', choices=[('0', _("all")), ('10', _("member")), ('11', _("enthusiast")), ('12', _("mainstay")), ('13', _("senior")), ('100', _("partner")), ('1000', _("editor")), ('2000', _("moderator")), ('10000', _("supervisor")), ('10100', _("administrator"))], description=u'能查看的角色:0-不限', validators=[ required(message=_("word_group is required")), ]) #消费金币/银币 consume_gold_cost = IntegerField(_("entry.consume_gold_cost"), default=0, description=u'消费金牌数', validators=[]) consume_silver_cost = IntegerField(_("entry.consume_silver_cost"), default=0, description=u'消费银牌数', validators=[]) #赏金金币/银币 reward_gold_cost = IntegerField(_("entry.reward_gold_cost"), default=0, description=u'赏金(金牌)', validators=[]) reward_silver_cost = IntegerField(_("entry.reward_silver_cost"), default=0, description=u'赏金(银牌)', validators=[]) published_time = DateTimeField( _("entry.published_time"), default=sys_now(), description=u'发布时间', validators=[ required(message=_("published_time is required")), ]) def validate_slug(self, field): # unique if len(field.data) > 50: raise ValidationError, _("Slug must be less than 50 characters") # slug = slugify(field.data) if field.data else slugify(self.title.data)[:50] # posts = Posts.query.filter_by(slug=slug) # if self.posts: # posts = posts.filter(db.not_(Posts.id==self.posts.id)) # if posts.count(): # error = gettext("This slug is taken") if field.data else gettext("Slug is required") # raise ValidationError, error pass def validate_tags(self, field): # 最多8个tag # 每个tag最长20个字符 pass
class EditDeployKeyForm(FlaskForm): id = IntegerField() name = StringField(validators=[InputRequired(), Length(4, 32)]) expired_date = DateTimeField(format="%Y-%m-%dT%H:%M:%S.%fZ") submid_edit_key = SubmitField('EDIT')
def generate(model_class, cn, readonly_fields=default_readonly_fields, freeze=False, obj=None): class GeneratedForm(MasterForm): pass if model_class: for column in model_class.__table__.columns: _nullable = column.nullable _type = str(column.type) validators = [] if not _nullable and column.name not in readonly_fields: validators += [input_required()] render_kw = {} if freeze or column.name in readonly_fields: render_kw['disabled'] = 'disabled' if column.foreign_keys: # TODO multiple foreign keys # TODO one key has multiple columns # TODO when foreign key is readonly, validate always fails (bug) parent_table_name = re.sub( ".+'", '', str(list(column.foreign_keys)[0]).split('.')[0]) _cls, _label = table_label_dict[parent_table_name] choices = [('', '(choose)')] + [ (str(a), b) for a, b in cn.s.query( _cls.id, getattr(_cls, _label)).limit(1000).all() ] setattr( GeneratedForm, column.name, SelectField(column.name, choices=choices, validators=validators, render_kw=render_kw)) elif _type == 'BIGINT' or _type.find('INT') > -1: setattr( GeneratedForm, column.name, IntegerField(column.name, validators=validators, render_kw=render_kw)) elif _type.find('VARCHAR') > -1: setattr( GeneratedForm, column.name, StringField(column.name, validators=validators, render_kw=render_kw)) elif _type.find('TEXT') > -1: setattr( GeneratedForm, column.name, TextAreaField(column.name, validators=validators, render_kw=render_kw)) elif _type == 'DATETIME': setattr( GeneratedForm, column.name, DateTimeField(column.name, validators=validators, render_kw=render_kw)) return GeneratedForm(obj=obj)
class F(Form): a = DateTimeField() b = DateTimeField(format="%Y-%m-%d %H:%M") c = DateTimeField(format="%-m/%-d/%Y %-I:%M")
class MoneyEntryForm(FlaskForm): type = IntegerField(lazy_gettext(u'Type:'), default=MoneyEntry.Type.INCOME) date = DateTimeField(lazy_gettext(u'Date:'), validators=[InputRequired()], format=constants.DATE_JS_FORMAT, default=datetime.now) category = SelectField(lazy_gettext(u'Category:'), coerce=int, validators=[InputRequired()]) value = FloatField(lazy_gettext(u'Value:'), validators=[ InputRequired(), NumberRange(min=0.01, message=lazy_gettext(u'Invalid value')) ], default=1.00) currency = StringField(lazy_gettext(u'Currency:'), validators=[InputRequired()], default=constants.DEFAULT_CURRENCY) description = StringField(lazy_gettext(u'Description:')) recurring = SelectField(lazy_gettext(u'Recurring:'), coerce=int, validators=[InputRequired()], choices=[(int(MoneyEntry.Recurring.SINGLE), lazy_gettext(u'Single')), (int(MoneyEntry.Recurring.EVERY_DAY), lazy_gettext(u'Every day')), (int(MoneyEntry.Recurring.EVERY_MONTH), lazy_gettext(u'Every month')), (int(MoneyEntry.Recurring.EVERY_YEAR), lazy_gettext(u'Every year'))], default=MoneyEntry.Recurring.SINGLE) state = SelectField(lazy_gettext(u'State:'), coerce=int, validators=[InputRequired()], choices=[(int(MoneyEntry.State.APPROVED), lazy_gettext(u'Approved')), (int(MoneyEntry.State.PENDING), lazy_gettext(u'Pending'))], default=MoneyEntry.State.APPROVED) submit = SubmitField(lazy_gettext(u'Confirm')) def __init__(self, categories: list, **kwargs): super(MoneyEntryForm, self).__init__(**kwargs) self.category.choices = categories def make_entry(self): entry = MoneyEntry() return self.update_entry(entry) def update_entry(self, entry: MoneyEntry): entry.type = self.type.data entry.description = self.description.data entry.value = self.value.data entry.currency = self.currency.data category_pos = self.category.data categories = self.category.choices entry.category = categories[category_pos][1] date = self.date.data entry.date = utils.stable_date(date) recurring_pos = self.recurring.data recurrings = self.recurring.choices entry.recurring = recurrings[recurring_pos][0] return entry
class ReportForm(DynamicForm): start = DateTimeField(format='%Y-%m-%d', description="Format of date is: YYYY-MM-DD") end = DateTimeField(format='%Y-%m-%d', description="Format of date is: YYYY-MM-DD")
class DateTimeForm(Form): # Date filter form needed for gantt and graph view execution_date = DateTimeField("Execution date", widget=DateTimePickerWidget())
def test_microseconds(self): d = datetime(2011, 5, 7, 3, 23, 14, 424200) F = make_form(a=DateTimeField(format="%Y-%m-%d %H:%M:%S.%f")) form = F(DummyPostData(a=["2011-05-07 03:23:14.4242"])) assert d == form.a.data
def get_wtform_field(field, instance='', **kwargs): ''' return a wtform field ''' _form_field = None _field_label = field.get("kds_formLabelName", '') #print("______label:", _field_label) _field_name = field.get("kds_formFieldName", '') _field_type_obj = field.get("kds_fieldType", {}) if isinstance(_field_type_obj.get('rdf_type'), list): _field_type_obj = _field_type_obj['rdf_type'][0] _field_validators = get_wtform_validators(field) _field_type = _field_type_obj.get('rdf_type', '') _field_row = float(field.get("kds_formLayoutRow", 0)) _default_val = calculate_default_value(field) if _field_type == 'kdr_TextField': _form_field = StringField(_field_label, _field_validators, description=field.get( 'kds_formFieldHelp', '')) elif _field_type == 'kdr_OpenBadgeSenderField': _form_field = ButtonActionField( _field_label, description=field.get('kds_formFieldHelp', ''), #button_action="mozillaBackpackSender", #button_text={'true':"Resend",'false':'Claim now'} ) field['kds_call_in_display'] = True field['kds_buttonAction'] = "mozillaBackpackSender" field['kds_buttonText'] = {'true': "Resend", 'false': 'Claim now'} field['kds_errorLogPropUri'] = "kds_errorLog" #x=y elif _field_type == 'kdr_ServerField': _form_field = None #form_field = StringField(_field_label, _field_validators, description= \ #field.get('kds_formFieldHelp', '')) elif _field_type == 'kdr_TextAreaField': _form_field = TextAreaField(_field_label, _field_validators, description=field.get( 'kds_formFieldHelp', '')) elif _field_type == 'kdr_PasswordField': #print("!!!! Mode: ", _field_type_obj.get('fieldMode')) _field_mode = _field_type_obj.get('kds_fieldMode', '') if _field_mode == "kdr_InitialPassword": _form_field = [{"kds_fieldName":_field_name, "kds_field":PasswordField(_field_label, _field_validators, description=\ field.get('kds_formFieldHelp',\ ''))}, {"kds_fieldName":_field_name + "_confirm", "kds_field":PasswordField("Re-enter"), "doNotSave":True}] elif _field_mode == "kdr_ChangePassword": _form_field = [{ "kds_fieldName": _field_name + "_old", "kds_field": PasswordField("Current"), "doNotSave": True }, { "kds_fieldName": _field_name, "kds_field": PasswordField("New"), "kds_formLayoutRow": _field_row + .01 }, { "kds_fieldName": _field_name + "_confirm", "kds_field": PasswordField("Re-enter"), "doNotSave": True, "kds_formLayoutRow": _field_row + .02 }] elif _field_mode == "kdr_LoginPassword": _form_field = PasswordField(_field_label, [InputRequired()], description=\ field.get('kds_formFieldHelp', '')) elif _field_type == 'kdr_BooleanField': _form_field = BooleanField(_field_label, _field_validators, description=field.get( 'kds_formFieldHelp', '')) elif _field_type == 'kdr_FileField': _form_field = FileField(_field_label, _field_validators, description=field.get('kds_formFieldHelp', '')) elif _field_type == 'kdr_HiddenField': _form_field = FileField(_field_label, _field_validators, description=field.get('kds_formFieldHelp', '')) elif _field_type == 'kdr_DateField': _date_format = rdfw().app.get(\ 'kds_dataFormats', {}).get('kds_pythonDateFormat', '') #print("date validators:\n", _field_validators) _add_optional = True for _val in _field_validators: if isinstance(_val, InputRequired): _add_optional = False break if _add_optional: _field_validators = [Optional()] + _field_validators _form_field = DateField(_field_label, _field_validators, description=field.get('kds_formFieldHelp', ''), default=_default_val, format=_date_format) field['kds_css'] += " dp" elif _field_type == 'kdr_DateTimeField': _form_field = DateTimeField(_field_label, _field_validators, description=field.get( 'kds_formFieldHelp', '')) elif _field_type == 'kdr_SelectField': #print("--Select Field: ", _field_label, _field_validators, description= \ #field.get('kds_formFieldHelp', '')) _form_field = SelectField(_field_label, _field_validators, description=field.get( 'kds_formFieldHelp', '')) #_form_field = StringField(_field_label, _field_validators, description= \ #field.get('kds_formFieldHelp', '')) elif _field_type == 'kdr_ImageFileOrURLField': if instance == "kdr_DisplayForm": _form_field = StringField(_field_label, description=field.get( 'kds_formFieldHelp', '')) field['kds_formFieldName'] = field['kds_formFieldName'] + "_image" print(" image count ") else: _form_field = [{ "kds_fieldName": _field_name + "_image", "kds_field": FileField("Image File") }, { "kds_fieldName": _field_name + "_url", "kds_field": StringField("Image Url", [URL]) }] elif _field_type == 'kdr_SubForm': from .rdfforms import rdf_framework_form_factory _sub_form_instance = _field_type_obj.get('kds_subFormInstance',\ 'kdr_LinkWithParent') if _sub_form_instance == 'kdr_LinkWithParent': _sub_form_instance = instance _form_path = rdfw().get_form_path(\ _field_type_obj.get('kds_subFormUri'), instance) kwargs['is_subobj'] = True _sub_form = FormField(\ rdf_framework_form_factory(_form_path, is_subobj=True), widget=BsGridTableWidget()) if "RepeatingSubForm" in _field_type_obj.get("kds_subFormMode"): _form_field = FieldList(_sub_form, _field_label, min_entries=1, widget=RepeatingSubFormWidget()) setattr(_form_field, "frameworkField", "RepeatingSubForm") else: _form_field = _sub_form setattr(_form_field, "frameworkField", "subForm") elif _field_type == 'kdr_FieldList': _field_json = dict.copy(field) _field_type_obj['rdf_type'] = _field_type_obj['kds_listFieldType'] _field_json['kds_fieldType'] = _field_type_obj list_field = get_wtform_field(_field_json, instance, **kwargs)['fld'] _form_field = FieldList(list_field, _field_label, min_entries=1) else: _form_field = StringField(_field_label, _field_validators, description=field.get( 'kds_formFieldHelp', '')) #print("--_form_field: ", _form_field) return {"fld": _form_field, "fld_json": field, "form_js": None}