Exemplo n.º 1
0
def Profile(user):
    class profile(Form):
        pass

    if user.heightInch is None:  #metric
        defaultSystem = "Metric"
        defaultHeight = [int(user.heightFeet), None, None, None]
        defaultWeight = [int(user.weight), None]

    else:
        defaultSystem = "US"
        defaultHeight = [
            None, None, int(user.heightFeet),
            int(user.heightInch)
        ]
        defaultWeight = [None, int(user.weight)]

    profile.age = IntegerField('age',
                               validators=[Required()],
                               default=int(user.age))
    profile.gender = RadioField('gender',
                                validators=[Required()],
                                choices=[("Males", "Male"),
                                         ("Females", "Female")],
                                default=user.gender)
    profile.conditions = SelectField('condition',
                                     choices=[("None", "None"),
                                              ("Pregnancy", "Pregnancy"),
                                              ("Lactation", "Lactation")],
                                     validators=[Required()],
                                     default=user.conditions)

    profile.unitSystem = RadioField('gender',
                                    validators=[Required()],
                                    choices=[("US", "US"),
                                             ("Metric", "Metric")],
                                    default=defaultSystem)
    profile.weight = IntegerField('weight(lb)', [validators.Optional()],
                                  default=defaultWeight[1])
    profile.weightKg = IntegerField('weight(kg)', [validators.Optional()],
                                    default=defaultWeight[0])
    profile.heightFeet = IntegerField('height(ft)', [validators.Optional()],
                                      default=defaultHeight[2])
    profile.heightInch = IntegerField('height(in)', [validators.Optional()],
                                      default=defaultHeight[3])
    profile.heightCm = IntegerField('height(cm)', [validators.Optional()],
                                    default=defaultHeight[0])
    profile.activity = SelectField('activity',
                                   coerce=float,
                                   choices=[(1.2, "Sedentary"),
                                            (1.375, "Lightly Active"),
                                            (1.55, "Moderately Active"),
                                            (1.725, "Very active"),
                                            (1.9, "Extremely Active")],
                                   validators=[Required()],
                                   default=user.activity)
    profile.saveChange = SubmitField("Save Changes")
    form = profile()
    return form
Exemplo n.º 2
0
class ProfileForm(Form):
    next = HiddenField()
    name = TextField(
            label = _("Username"),
            validators = [
                Required(),
                Length(USERNAME_LEN_MIN, USERNAME_LEN_MAX),
                ],
            description = u"Combination of letters/digits/underscore, at least %s characters." % USERNAME_LEN_MIN,
            )
    email = EmailField(
            label = _('Email'), 
            validators = [Email()],
            )
    created_time = DateField(
            label = _('Created time'),
            )
    role_id = RadioField(
            label = "Role",
            validators = [AnyOf([str(val) for val in USER_ROLE.keys()])],
            choices = [(str(val), label) for val, label in USER_ROLE.items()],
            )
    status_id = RadioField(
            label = "Status",
            validators = [AnyOf([str(val) for val in USER_STATUS.keys()])],
            choices = [(str(val), label) for val, label in USER_STATUS.items()],
            )
    real_name = TextField(
            label = _('Real name'),
            validators = [
                Length(REALNAME_LEN_MIN, REALNAME_LEN_MAX),
                ]
            )
    age = IntegerField(
            label = _('Age'), 
            validators = [NumberRange(AGE_MIN, AGE_MAX)],
            )
    phone = TelField(
            label = _('Phone'), 
            )
    url = URLField(
            label = _('URL'), 
            validators = [URL()],
            )
    deposit = DecimalField(
            label = _('Deposit'), 
            validators = [NumberRange(DEPOSIT_MIN, DEPOSIT_MAX)],
            )
    location = TextField(
            label = _('Location'), 
            validators = [Length(max=50)]
            )
    bio = TextAreaField(
            label = _('Bio'), 
            validators = [Length(max=1024)]
            )
    submit = SubmitField(_('Save'))
Exemplo n.º 3
0
class UserForm(Form):
    next = HiddenField()
    role_id = RadioField(u"Role",
                         [AnyOf([str(val) for val in USER_ROLE.keys()])],
                         choices=[(str(val), label)
                                  for val, label in USER_ROLE.items()])
    status_id = RadioField(u"Status",
                           [AnyOf([str(val) for val in USER_STATUS.keys()])],
                           choices=[(str(val), label)
                                    for val, label in USER_STATUS.items()])
    # A demo of datepicker.
    created_time = DateField(u'Created time')
    submit = SubmitField(u'Save')
Exemplo n.º 4
0
 class EditForm(Form):
     username = TextField(
         'Username', validators=[validators.LengthOrEmpty(min=3, max=8)])
     first_name = TextField('First Name')
     last_name = TextField('Last Name')
     dob = TextField(
         'Date of Birth (MM/DD/YYYY)',
         validators=[
             validators.Date(
                 format='%m/%d/%Y',
                 message='Invalid format. Please use mm/dd/yyyy.')
         ])
     email = TextField('E-mail Address', validators=[validators.Email()])
     sponsor = SelectField('Sponsor',
                           choices=[(s.username, ''.join(
                               (s.last_name, ', ', s.first_name)))
                                    for s in database.get_sponsors(True)])
     grad_date = TextField(
         'Graduation Date (MM/YYYY)',
         validators=[
             validators.Date(format='%m/%Y',
                             message='Invalid format. Please use mm/yyyy')
         ])
     acct_type = RadioField(
         choices=[('acad', 'Academic'), ('research',
                                         'Research & Academic')])
     comments = TextAreaField('Comments')
     status = TextField('Status')
Exemplo n.º 5
0
class EditMachineForm(Form):
    name = TextField(_(u"机器名:"),
                     validators=[required(_(u"请输入机器名")), is_legal_name])
    description = TextAreaField(_(u"描述:"))
    status = RadioField(_(u"状态:"),
                        default=Machine.OK,
                        coerce=int,
                        choices=((Machine.OK, _(u"正常")), (Machine.REALLY,
                                                          _(u"停用"))))
    username = TextField(_(u"用户名:"), validators=[required(_(u"请输入用户名"))])
    password = TextField(_(u"密码:"), validators=[required(message=_(u"请输入密码"))])
    url_hudson = TextField(_(u"Hudson地址:"),
                           validators=[required(_(u"请输入Hudson地址"))])
    key = TextField(_(u"SSH Key:"))
    submit = SubmitField(_(u"保存"))

    def __init__(self, machine, *args, **kwargs):
        self.machine = machine
        kwargs['obj'] = self.machine
        super(EditMachineForm, self).__init__(*args, **kwargs)

    def validate_name(self, field):
        machine = Machine.query.filter(
            db.and_(Machine.name.like(field.data),
                    db.not_(Machine.id == self.machine.id))).first()
        if machine:
            raise ValidationError(gettext(u"机器名已经存在"))
Exemplo n.º 6
0
class UserRegForm(Form):
    name = TextField(
        u"用户名",
        validators=[Required(),
                    Length(min=3, max=32),
                    Regexp(re_username)])
    email = TextField(u'Email', validators=[Required(), Email()])
    gender = RadioField(u'性别',
                        coerce=int,
                        choices=[(0, u'男'), (1, u'女')],
                        default=0,
                        widget=BSListWidget())
    password = PasswordField(u'密码',
                             validators=[
                                 Required(),
                                 Length(min=5, max=60),
                                 EqualTo('confirm',
                                         message='Passwords must match')
                             ])
    confirm = PasswordField(u'确认密码',
                            validators=[Required(),
                                        Length(min=5, max=60)])

    def validate_name(form, field):
        name = field.data.lower()
        if name in reserved_words:
            raise ValidationError(u'用户名不能为系统保留字')
        user = User.query.filter(User.username == field.data).first()
        if user:
            raise ValidationError(u'该用户名已被注册')

    def validate_email(form, field):
        user = User.query.filter(User.email == field.data).first()
        if user:
            raise ValidationError(u'该email已被注册')
Exemplo n.º 7
0
class ProfileForm(Form):
    multipart = True
    next = HiddenField()
    email = EmailField(u'Email', [Required(), Email()])
    # Don't use the same name as model because we are going to use populate_obj().
    avatar_file = FileField(u"Avatar", [Optional()])
    sex_code = RadioField(u"Sex",
                          [AnyOf([str(val) for val in SEX_TYPE.keys()])],
                          choices=[(str(val), label)
                                   for val, label in SEX_TYPE.items()])
    age = IntegerField(u'Age', [Optional(), NumberRange(AGE_MIN, AGE_MAX)])
    phone = TelField(u'Phone', [Length(max=64)])
    url = URLField(u'URL', [Optional(), URL()])
    deposit = DecimalField(
        u'Deposit',
        [Optional(), NumberRange(DEPOSIT_MIN, DEPOSIT_MAX)])
    location = TextField(u'Location', [Length(max=64)])
    bio = TextAreaField(u'Bio', [Length(max=1024)])
    submit = SubmitField(u'Save')

    def validate_name(form, field):
        user = User.get_by_id(current_user.id)
        if not user.check_name(field.data):
            raise ValidationError("Please pick another name.")

    def validate_avatar_file(form, field):
        if field.data and not allowed_file(field.data.filename):
            raise ValidationError("Please upload files with extensions: %s" %
                                  "/".join(ALLOWED_AVATAR_EXTENSIONS))
Exemplo n.º 8
0
class PostForm(Form):
    title = TextField(u"标题",
                      validators=[required(message=u"标题不能为空")],
                      id="post_title")

    link = TextField(u"链接",
                     default="http://",
                     validators=[optional(),
                                 url(message=u"必须是个有效的链接")],
                     id="post_link")
    description = TextAreaField(u"描述", id="post_description")
    tags = TextField(u"标签(用逗号分隔)", id="post_tags")
    access = RadioField(u"谁可以查看?",
                        default=Post.PUBLIC,
                        coerce=int,
                        choices=((Post.PUBLIC, u"任何人"), (Post.FRIENDS, u"好友"),
                                 (Post.PRIVATE, u"只有自己")))
    submit = SubmitField(u"提交")

    def __init__(self, *args, **kwargs):
        self.post = kwargs.get('obj', None)
        super(PostForm, self).__init__(*args, **kwargs)

    def validate_link(self, field):
        posts = Post.query.public().filter_by(link=field.data)
        if self.post:
            posts = posts.filter(db.not_(Post.id == self.post.id))
        if posts.count():
            raise ValidationError, u"这个链接已经有人提交了"
Exemplo n.º 9
0
class UserForm(Form):
    next = HiddenField()
    role_code = RadioField(u"Role",
                           [AnyOf([str(val) for val in USER_ROLE.keys()])],
                           choices=[(str(val), label)
                                    for val, label in USER_ROLE.items()])
    status_code = RadioField(u"Status",
                             [AnyOf([str(val) for val in USER_STATUS.keys()])],
                             choices=[(str(val), label)
                                      for val, label in USER_STATUS.items()])
    # A demo of datepicker.
    created_time = DateField(u'Created time')
    submit = SubmitField(u'Save')

    def save(self, user):
        self.populate_obj(user)
        db.session.add(user)
        db.session.commit()
Exemplo n.º 10
0
 def __init__(self, name, title, descr, default, column):
     Filter.__init__(self, name, title, descr)
     self.default = default
     self.column_names = column
     self.form_def = [
         RadioField(choices=[('1', _(u'Yes')), ('0', _(u'No')),
                             ('-1', _(u'Ignore'))],
                    default=default)
     ]
Exemplo n.º 11
0
class EditUserForm(Form):
    next = HiddenField()
    role_code = RadioField(_("Role"),
                           [AnyOf([str(val) for val in USER_ROLE.keys()])],
                           choices=[(str(val), label)
                                    for val, label in USER_ROLE.items()])
    status_code = RadioField(_("Status"),
                             [AnyOf([str(val) for val in USER_STATUS.keys()])],
                             choices=[(str(val), label)
                                      for val, label in USER_STATUS.items()])
    # A demo of datepicker.
    vm_quota = IntegerField(
        _("VM Quota"),
        [Required(), NumberRange(VM_QUOTA_MIN, VM_QUOTA_MAX)])
    created_time = DateField(_('Created time'))
    submit = SubmitField(_('Save'))

    def validate_name(self, field):
        if User.query.filter_by(name=field.data).first() is not None:
            raise ValidationError(_(u'This username is taken'))
Exemplo n.º 12
0
class EditHostForm(Form):
    next = HiddenField()
    type_code = RadioField(_(u"Hypervisor Type"),
                           [AnyOf([str(val) for val in HOST_TYPE.keys()])],
                           choices=[(str(val), label)
                                    for val, label in HOST_TYPE.items()])
    username = TextField(_(u'The Username used by libvirt+ssh connection'),
                         [Required()])
    submit = SubmitField(_(u'Save'))

    def validate_address(self, field):
        if Host.query.filter_by(address=field.data).first() is not None:
            raise ValidationError(_(u'This host is added'))
Exemplo n.º 13
0
class LoginForm(Form):
    next = HiddenField()
    login = TextField(_(u'Username or email'), [Required()])
    password = PasswordField(
        _('Password'),
        [Required(), Length(PASSWORD_LEN_MIN, PASSWORD_LEN_MAX)])
    locale_code = RadioField(
        _("Language"),
        [AnyOf([str(val) for val in USER_LOCALE_STRING.keys()])],
        choices=[(str(val), label)
                 for val, label in USER_LOCALE_STRING.items()],
        default=USER_LOCALE_ZH_CN)
    remember = BooleanField(_('Remember me'))
    submit = SubmitField(_('Login'))
Exemplo n.º 14
0
class EditTaskForm(Form):
    name = TextField(
        _(u"任务名称"),
        validators=[required(message=_(u"任务名称不为空")), is_legal_taskname])
    description = TextAreaField(_(u"描述"))
    access = RadioField(_(u"状态"),
                        default=Task.PUBLIC,
                        coerce=int,
                        choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE,
                                                           _(u"私有"))))

    moduletype_id = SelectField(_(u"选择模块"), coerce=int)

    case_list = SelectMultipleField(
        _(u"选择用例"),
        coerce=int,
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))

    code_list = SelectMultipleField(
        _(u"选择代码"),
        coerce=int,
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))

    command = TextAreaField(_(u"执行命令"))

    runtime = TextAreaField(_(u"运行时间"))

    svn = TextAreaField(_(u"svn地址"), validators=[is_legal_svn])

    email = TextAreaField(_(u"邮箱地址"))

    email_topic = TextAreaField(_(u"邮件主题"))
    other = TextAreaField(_(u"其他"))

    submit = SubmitField(_(u"保存"))

    def __init__(self, task, *args, **kwargs):
        self.task = task
        kwargs['obj'] = self.task
        super(EditTaskForm, self).__init__(*args, **kwargs)

    def validate_name(self, field):
        task = Task.query.filter(
            db.and_(Task.name.like(field.data),
                    db.not_(Task.id == self.task.id))).first()
        if task:
            raise ValidationError(gettext(u"名称已经被使用"))
Exemplo n.º 15
0
class AddTaskForm(Form):

    name = TextField(
        _(u"任务名称"),
        validators=[required(message=_(u"任务名称不为空")), is_legal_taskname])
    description = TextAreaField(_(u"描述"))
    access = RadioField(_(u"状态"),
                        default=Task.PUBLIC,
                        coerce=int,
                        choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE,
                                                           _(u"私有"))))

    moduletype_id = SelectField(_(u"选择模块"), coerce=int)

    case_list = SelectMultipleField(
        _(u"选择用例"),
        coerce=int,
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))

    code_list = SelectMultipleField(
        _(u"选择代码"),
        coerce=int,
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))

    command = TextAreaField(
        _(u"执行命令"),
        default=
        u"hg clone http://10.0.2.205:9090/hg/test.cgi/script/\n./script/command.sh"
    )

    runtime = TextAreaField(_(u"运行时间"))

    svn = TextAreaField(_(u"svn地址"), validators=[is_legal_svn])

    email = TextAreaField(_(u"邮箱地址"))

    email_topic = TextAreaField(_(u"邮件主题"))

    other = TextAreaField(_(u"其他"))

    submit = SubmitField(_(u"添加"))

    def validate_name(self, field):
        task = Task.query.filter(Task.name.like(field.data)).first()
        if task:
            raise ValidationError(gettext(u"该名称已经被使用"))
Exemplo n.º 16
0
class ExampleForm(Form):
    field1 = TextField('First Field', description='This is field one.')
    field2 = TextField('Second Field',
                       description='This is field two.',
                       validators=[Required()])
    hidden_field = HiddenField('You cannot see this', description='Nope')
    recaptcha = RecaptchaField('A sample recaptcha field')
    radio_field = RadioField('This is a radio field',
                             choices=[
                                 ('head_radio', 'Head radio'),
                                 ('radio_76fm', "Radio '76 FM"),
                                 ('lips_106', 'Lips 106'),
                                 ('wctr', 'WCTR'),
                             ])

    def validate_hidden_field(form, field):
        raise ValidationError('Always wrong')
Exemplo n.º 17
0
class MarkForm(Form):
    referrer = HiddenField([validators.URL(require_tld=False)])
    title = TextField('Title',
                      [validators.Length(min=0, max=255)],
                      filters=[strip_filter])
    url = TextField('URL',
                    [validators.Length(min=4, max=512),
                     validators.URL(require_tld=False,
                                    message='Not a valid URL')],
                    filters=[strip_filter])
    type = RadioField('Type',
                      coerce=unicode,
                      choices=[('bookmark', 'Bookmark'), ('feed', 'Feed')],
                      default='bookmark')
    tags = TextField('Tags',
                     [validators.Length(min=0, max=255)],
                     filters=[strip_filter])
Exemplo n.º 18
0
class NewArticleForm(Form):
    """
    新增文章用的表單
    """
    title = TextField(u"標題", validators=[required()])
    content = TextAreaField(u"內文", validators=[required()])
    authority = RadioField(u"類型",
                           choices=[('public', u'公開'), ('private', u'私人')],
                           default='private')
    #question = FormField(QuestionForm)
    #questions = FieldList(TextAreaField())
    #questions = FieldList(FormField(QuestionForm))
    # questions = content
    # for i in xrange(20):
    #     qu = TextField(u"問題"+str(i), validators=[required()])
    #     questions.append(content)
    #     #questions.append_entry()
    submit = SubmitField(u"送出")
Exemplo n.º 19
0
class AddMachineForm(Form):
    name = TextField(_(u"机器名:"),
                     validators=[required(_(u"请输入机器名")), is_legal_name])
    description = TextAreaField(_(u"描述:"))
    status = RadioField(_(u"状态:"),
                        default=Machine.OK,
                        coerce=int,
                        choices=((Machine.OK, _(u"正常")), (Machine.REALLY,
                                                          _(u"停用"))))
    username = TextField(_(u"用户名:"), validators=[required(_(u"请输入用户名"))])
    password = TextField(_(u"密码:"), validators=[required(message=_(u"请输入密码"))])
    url_hudson = TextField(_(u"Hudson地址:"),
                           validators=[required(_(u"请输入Hudson地址"))])
    submit = SubmitField(_(u"提交"))

    def validate_name(self, field):
        machine = Machine.query.filter(Machine.name.like(field.data)).first()
        if machine:
            raise ValidationError(gettext(u"机器名已经存在"))
Exemplo n.º 20
0
class EditTaskForm(Form):
    '''It is used for editing tasks, defines edit tasks form.'''

    next = HiddenField()
    name = TextField(
        _(u"任务名称"),
        validators=[required(message=_(u"任务名称不为空")), is_legal_taskname])
    description = TextAreaField(_(u"描述"))
    access = RadioField(_(u"状态"),
                        default=Task.PUBLIC,
                        coerce=int,
                        choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE,
                                                           _(u"私有"))))

    moduletype_id = SelectField(_(u"选择模块"), coerce=int)
    machine_id = SelectField(_(u"选择机器:"), coerce=int)

    command = TextAreaField(_(u"执行命令"))

    runtime = TextAreaField(_(u"运行时间"))

    svn = TextAreaField(_(u"svn地址"), validators=[is_legal_svn])

    email = TextAreaField(_(u"邮箱地址"))

    email_topic = TextAreaField(_(u"邮件主题"))
    other = TextAreaField(_(u"其他"))

    submit = SubmitField(_(u"保存"))

    def __init__(self, task, *args, **kwargs):
        self.task = task
        kwargs['obj'] = self.task
        super(EditTaskForm, self).__init__(*args, **kwargs)

    def validate_name(self, field):
        task = Task.query.filter(
            db.and_(Task.name.like(field.data),
                    db.not_(Task.id == self.task.id))).first()
        if task:
            raise ValidationError(gettext(u"名称已经被使用"))
Exemplo n.º 21
0
class AddCaseForm(Form):
    title = TextField(
        _(u"用例名:"), validators=[required(message=_(u"请输入用例名")), is_legal_name])

    description = TextAreaField(_(u"描述:"))
    access = RadioField(_(u"状态:"),
                        default=Case.PUBLIC,
                        coerce=int,
                        choices=((Case.PUBLIC, _(u"公开")), (Case.PRIVATE,
                                                           _(u"私有"))))

    usecase_input = TextAreaField(_(u"用例输入:"))
    usecase_output = TextAreaField(_(u"用例输出:"))

    module_type = SelectField(_(u"所属模块:"), coerce=int)
    submit = SubmitField(_(u"提交"))

    def validate_title(self, field):
        case = Case.query.filter(Case.title.like(field.data)).first()
        if case:
            raise ValidationError(gettext(u"用例名已经存在"))
Exemplo n.º 22
0
class EditCaseForm(Form):
    title = TextField(
        _(u"用例名:"), validators=[required(message=_(u"请输入用例名")), is_legal_name])

    description = TextField(_(u"描述:"))
    access = RadioField(_(u"状态:"),
                        default=Case.PUBLIC,
                        coerce=int,
                        choices=((Case.PUBLIC, _(u"公开")), (Case.PRIVATE,
                                                           _(u"私有"))))

    usecase_input = TextAreaField(_(u"用例输入:"))
    usecase_output = TextAreaField(_(u"用例输出:"))

    module_type = SelectField(_(u"所属模块:"), coerce=int)
    submit = SubmitField(_(u"保存"))

    def __init__(self, case, *args, **kwargs):
        self.case = case
        kwargs['obj'] = self.case
        super(EditCaseForm, self).__init__(*args, **kwargs)
Exemplo n.º 23
0
class RegisterForm(Form):
	firstname = TextField('First Name', [validators.Required()], 
						  description=u'First Name')
	lastname = TextField('Last Name',[validators.Required()], 
						 description=u'Last Name')
	email = TextField('Email',[validators.Email(message= (u'Invalid email address'))], 
					  description=u'Email')
	password = PasswordField('Password', [validators.Required(), 
							 validators.length(min=6, max=25)],
							 description=u'Password')
	address= TextField('Address',[validators.Required()], 
					   description=u'Address')
	city= TextField('City',[validators.Required()], description=u'City')
	state = TextField('State', [validators.Required(), 
					  validators.length(max=2)], description=u'State')
	zipcode = TextField('Zipcode', [validators.Required()], description=u'Zipcode')
	country = TextField('Country',[validators.Required()], description=u'Country')
	dob = DateField('DOB', [validators.Required(message= (u'Enter birthdate: mm/dd/yyyy'))], 
					format= '%m/%d/%Y', description=u'Date of Birth (mm/dd/yyyy)')
	gender = RadioField('Gender', [validators.Required()], 
						choices=[('male', 'M'),('female','F')], description=u'Gender')
Exemplo n.º 24
0
class AddTaskForm(Form):
    '''It is used for adding tasks, defines add tasks form.'''

    next = HiddenField()
    name = TextField(
        _(u"任务名称:"),
        validators=[required(message=_(u"任务名称不为空")), is_legal_taskname])
    description = TextAreaField(_(u"描述:"))
    access = RadioField(_(u"状态:"),
                        default=Task.PUBLIC,
                        coerce=int,
                        choices=((Task.PUBLIC, _(u"公开")), (Task.PRIVATE,
                                                           _(u"私有"))))

    moduletype_id = SelectField(_(u"选择模块:"), coerce=int)

    machine_id = SelectField(_(u"选择机器:"), coerce=int)

    command = TextAreaField(
        _(u"执行命令:"),
        default=
        u"hg clone http://10.0.2.205:9090/hg/test.cgi/script/\n./script/command.sh"
    )

    runtime = TextAreaField(_(u"运行时间:"))

    svn = TextAreaField(_(u"svn地址:"), validators=[is_legal_svn])

    email = TextAreaField(_(u"邮箱地址:"))

    email_topic = TextAreaField(_(u"邮件主题:"))

    other = TextAreaField(_(u"其他:"))

    submit = SubmitField(_(u"添加"))

    def validate_name(self, field):
        task = Task.query.filter(Task.name.like(field.data)).first()
        if task:
            raise ValidationError(gettext(u"该名称已经被使用"))
Exemplo n.º 25
0
class ProfileForm(Form):
    multipart = True
    next = HiddenField()
    email = EmailField(_(u'Email'), [Required(), Email()])
    vm_quota = IntegerField(_(u'Quota of VirtualMachines'))
    locale_code = RadioField(
        _("Language"),
        [AnyOf([str(val) for val in USER_LOCALE_STRING.keys()])],
        choices=[(str(val), label)
                 for val, label in USER_LOCALE_STRING.items()])

    submit = SubmitField(_(u'Save'))

    def validate_name(form, field):
        user = User.get_by_id(current_user.id)
        if not user.check_name(field.data):
            raise ValidationError(_("Please pick another name."))

    def validate_vm_quota(form, field):
        if (not current_user.is_admin()) and current_user.vm_quota != int(
                field.data):
            raise ValidationError(_("Only admin user can update vm quota."))
Exemplo n.º 26
0
class EditAccountForm(Form):
    '''It is used for edit account, defines edit account form.'''

    username = TextField(_(u"用户名:"), validators=[
                         required(_(u"请输入用户名")), is_legal_name])

    email = TextField(_(u"邮箱地址:"), validators=[
                      required(message=_(u"请输入邮箱地址")),
                      email(message=_(u"请输入有效的邮箱地址"))])

    email_alerts = BooleanField(_(u"开启邮件提醒"))

    status = BooleanField(_(u"账号状态"))

    role = RadioField(_(u"角色"), default=User.MEMBER, coerce=int, choices=(
                      (User.MEMBER, _(u"普通用户")), (User.MODERATOR,
                      _(u"高级用户")), (User.ADMIN, _(u"管理员"))))

    submit = SubmitField(_(u"保存"))

    def __init__(self, user, *args, **kwargs):
        self.user = user
        kwargs['obj'] = self.user
        super(EditAccountForm, self).__init__(*args, **kwargs)

    def validate_username(self, field):
        user = User.query.filter(db.and_(
                                 User.username.like(field.data),
                                 db.not_(User.id == self.user.id))).first()

        if user:
            raise ValidationError(gettext(u"用户名已经存在"))

    def validate_email(self, field):
        user = User.query.filter(db.and_(
                                 User.email.like(field.data),
                                 db.not_(User.id == self.user.id))).first()
        if user:
            raise ValidationError(gettext(u"邮箱地址已经存在"))
Exemplo n.º 27
0
def userlist(page=1, pending=False, sponsored=False, rolloffs=False):
    # We need to make sure sponsors without admin/labstaff permissions don't go
    # browsing through all the users data
    domains = g.user.get_domains()
    if ((sponsored and 'sponsor' not in domains) or
        (not sponsored and (not g.user_is_labstaff) and (not g.user_is_admin))
            or (rolloffs and (not g.user_is_labstaff) and
                (not g.user_is_admin))):
        flash("Unauthorized.")
        return redirect('index')
    if (pending or rolloffs) and request.method == "POST":
        form = Form(request.form)
        if not form.validate():
            flash("There was an error with your submission.")
            redirect(request.url)
        users = [
            user for user, value in request.form.iteritems()
            if value == 'approve'
        ]
        if rolloffs:
            users = [user for user, value in request.form.iteritems()]
        users = [User.username == user for user in users]
        if len(users) > 0:
            query = User.query.filter(or_(*users))
            if sponsored:
                # Filter and make sure we only get this sponsors users, for security
                query = query.filter(User.sponsor == g.user.username)
            users = query.all()
            for user in users:
                if sponsored:
                    user.status = 'pending_labstaff'
                elif rolloffs:
                    user.status = 'pending_rolloff'
                else:
                    user.status = 'pending_create'
                db.session.add(user)
            db.session.commit()
        # here we handle denying accounts:
        users = [
            user for user, value in request.form.iteritems() if value == 'deny'
        ]
        users = [User.username == user for user in users]
        if len(users) > 0:
            query = User.query.filter(or_(*users))
            if sponsored:
                query = query.filter(User.sponsor == g.user.username)
            users = query.all()
            for user in users:
                # send rejection emails, silent reject if comments are empty
                if sponsored:
                    mail.sponsor_reject(user)
                elif g.user_is_admin:
                    mail.admin_reject(user)
                # drop rejected users
                db.session.delete(user)
            db.session.commit()

    query = User.query
    sort = 'username'
    sort_col = User.username
    sort_dir = asc
    cols = {
        'username': User.username,
        'uid': User._uid,
        'sponsor': User.sponsor,
        'email': User.email,
        'name': User.last_name,
        'last_name': User.last_name,
        'first_name': User.first_name,
        'status': User.status,
        'grad_date': User._grad_date
    }

    # Let's make the filter form
    class FilterForm(Form):
        pass

    for field, col in cols.iteritems():
        setattr(FilterForm, field, TextField())
    filter_form = FilterForm(request.args)

    if 'sort' in request.args:
        if request.args['sort'] in cols:
            sort = request.args['sort']
            sort_col = cols[request.args['sort']]
    if 'dir' in request.args and request.args['dir'] == 'desc':
        sort_dir = desc

    if sponsored:
        query = query.filter(User.sponsor == g.user.username)
        if pending:
            query = query.filter(User.status == 'pending_sponsor')
        else:
            query = query.filter(User.status != 'pending_sponsor')
    elif rolloffs:
        now = date.today()
        query = query.filter(User._grad_date <= now)
        query = query.filter(User.status != 'pending_sponsor')
        query = query.filter(User.status != 'pending_labstaff')
        query = query.filter(User.status != 'pending_rolloff')
    else:
        if pending:
            query = query.filter(User.status == 'pending_labstaff')


#        else:
#            query = query.filter(User.status != 'pending_labstaff')
#            query = query.filter(User.status != 'pending_sponsor')
    for field, col in cols.iteritems():
        if field in request.args:
            if request.args[field].strip() == "":
                continue
            query = query.filter(col.like(request.args[field].strip()))
    query = query.order_by(sort_dir(sort_col))
    page = query.paginate(page)
    if pending:
        # Patch a Form. This allows us to keep our CSRF protection
        class F(Form):
            pass

        for user in page.items:
            setattr(
                F, user.username,
                RadioField(choices=[('approve', 'Approve'),
                                    ('postpone', 'Postpone'),
                                    ('deny', 'Deny')],
                           validators=[validators.Required()]))
        # Flask-WTForms likes to pull data from request.form. Force it not to.
        form = F(ImmutableMultiDict())
        # We do this after the fact so WTForms can do some of its binding
        for user in page.items:
            user.radio = getattr(form, user.username)
            user.radio.data = 'postpone'
        if sponsored:
            template = 'sponsorship_requests.html'
        else:
            template = 'list_pending_users.html'
    elif rolloffs:

        class rolloffCheckbox(Form):
            pass

        for user in page.items:
            setattr(rolloffCheckbox, user.username, BooleanField())
        form = rolloffCheckbox(ImmutableMultiDict())
        for user in page.items:
            user.checkbox = getattr(form, user.username)
        template = 'list_upcoming_rolloffs.html'
    else:
        form = Form()
        if sponsored:
            template = 'sponsored_users.html'
        else:
            template = 'userlist.html'
    return render_template(template,
                           page=page,
                           sort=sort,
                           sort_dir='asc' if sort_dir == asc else 'desc',
                           form=form,
                           filter_form=filter_form)
Exemplo n.º 28
0
class RegisterIntroForm(Form):
    has_udelid = RadioField('Do you have a UDelNet ID?',
                            choices=[('yes', 'Yes'), ('no', 'No')],
                            validators=[validators.Required()])
Exemplo n.º 29
0
def edit_user(uid=-1):
    if uid == -1:
        return redirect(url_for('edit_user', uid=g.user.uid))
    user = User.query.filter(User._uid == uid).all()
    if len(user) == 0:
        flash('User not found!')
        return redirect(url_for("index"))
    user = user[0]
    self_editing = False
    sponsor_editing = False
    labstaff_editing = g.user_is_labstaff
    admin_editing = g.user_is_admin

    if not (g.user_is_admin or g.user_is_labstaff):
        # If a user isn't an admin or a sponsor, they can only see their own page
        if 'sponsor' not in g.user.get_domains():
            if g.user.uid != user.uid:
                flash("You have wandered somewhere you do not belong.")
                return redirect(url_for('index'))
            else:
                self_editing = True
        else:
            # If they're not an admin but are a sponsor, they need to be this user's sponsor
            if g.user.username != user.sponsor:
                flash("You have wandered somewhere you do not belong.")
                return redirect(url_for('index'))
            else:
                sponsor_editing = True

    enabled_fields = []

    class EditForm(Form):
        username = TextField(
            'Username', validators=[validators.LengthOrEmpty(min=3, max=8)])
        first_name = TextField('First Name')
        last_name = TextField('Last Name')
        dob = TextField(
            'Date of Birth (MM/DD/YYYY)',
            validators=[
                validators.Date(
                    format='%m/%d/%Y',
                    message='Invalid format. Please use mm/dd/yyyy.')
            ])
        email = TextField('E-mail Address', validators=[validators.Email()])
        sponsor = SelectField('Sponsor',
                              choices=[(s.username, ''.join(
                                  (s.last_name, ', ', s.first_name)))
                                       for s in database.get_sponsors(True)])
        grad_date = TextField(
            'Graduation Date (MM/YYYY)',
            validators=[
                validators.Date(format='%m/%Y',
                                message='Invalid format. Please use mm/yyyy')
            ])
        acct_type = RadioField(
            choices=[('acad', 'Academic'), ('research',
                                            'Research & Academic')])
        comments = TextAreaField('Comments')
        status = TextField('Status')

    # First Name and Last Name
    # if labstaff_editing or admin_editing:

    if user.status in ('pending_sponsor',
                       'pending_labstaff') and g.user_is_admin:
        enabled_fields.extend(['admin_approval', 'acct_type'])
        EditForm.admin_approval = RadioField(
            choices=[('approve',
                      'Approve'), ('deny', 'Deny'), ('postpone', 'Postpone')])
    elif user.status == 'pending_sponsor' and 'sponsor' in g.user.get_domains(
    ):
        enabled_fields.append('sponsor_approval')
        EditForm.sponsor_approval = RadioField(
            choices=[('approve',
                      'Approve'), ('deny', 'Deny'), ('postpone', 'Postpone')])
    else:
        pass

    if g.user_is_admin or g.user_is_labstaff:
        enabled_fields.extend(
            ['comments', 'sponsor', 'email', 'dob', 'first_name', 'last_name'])

    if g.user_is_admin or g.user_is_labstaff or self_editing:
        enabled_fields.extend(['password', 'pw_confirm'])
        EditForm.password = PasswordField('Password',
                                          validators=[
                                              validators.LengthOrEmpty(min=8,
                                                                       max=50),
                                              validators.CrackLib()
                                          ])
        EditForm.pw_confirm = PasswordField(
            'Confirm Password',
            validators=[
                validators.LengthOrEmpty(min=8, max=50),
                validators.EqualTo('password',
                                   message='Passwords do not match.')
            ])
    if self_editing:
        EditForm.current_password = PasswordField(
            'Current Password',
            validators=[
                validators.LengthOrEmpty(max=50),
                validators.Required()
            ])

    form = EditForm()

    if form.is_submitted():
        if form.validate_on_submit():
            if form.username.data != '':
                user.username = form.username.data
            if form.password.data != '':
                user.password = form.password.data
            if form.first_name.data != '':
                user.first_name = form.first_name.data
            if form.last_name.data != '':
                user.last_name = form.last_name.data
            if form.dob.data != '':
                user.dob = form.dob.data  # TODO: Extra validation on birth date?
            if form.email.data != '':
                user.email = form.email.data  # TODO: More validation on email
                # Auto-fill udel id field.
                # Make sure email isn't used
            if form.sponsor.data != '':
                user.sponsor = form.sponsor.data
            if form.grad_date.data != '':
                user.grad_date = form.grad_date.data
            # if form.description.data != '': #not implemented in the user object yet.
            #     user.comments = form.description.data
            if user.is_active() and form.disable.data:
                user.status = 'pending_disable'
            if user.is_disabled() and not form.disable.data:
                user.status = 'reactivate'
            if form.acct_type.data == 'acad':
                user.add_domain('acad')
            else:
                user.add_domains('acad', 'research')
            db.session.add(user)
            db.session.commit()
            flash("User updated.")
        else:
            return render_template(
                "edit_user.html",
                form=form,
                error="There was an error with your submission",
                edit_user=user)

    form = EditForm(ImmutableMultiDict())
    form.username.data = user.username
    form.first_name.data = user.first_name
    form.last_name.data = user.last_name
    form.dob.data = user.dob
    form.email.data = user.email
    form.sponsor.data = user.sponsor
    form.grad_date.data = user.grad_date
    if 'acad' in user.get_domains() and not 'research' in user.get_domains():
        form.acct_type.data = 'acad'
    if 'acad' in user.get_domains() and 'research' in user.get_domains():
        form.acct_type.data = 'research'
    if 'other' in user.get_domains():
        form.acct_type.data = 'other'

    ajax_fields = []
    # Let's build the display form
    sections = ['Account Details']
    display = {'Account Details': []}
    d = display['Account Details']
    # The tuple will go label, field, errors (list)
    d.append(('Username', Markup('<label>%s</label>' % user.username),
              'username', None))
    d.append(('UID', Markup('<label>%s</label>' % user.uid), 'uid', None))

    # First Name and Last Name
    if labstaff_editing or admin_editing:
        d.append(('First Name', form.first_name(), 'first_name',
                  form.first_name.errors))
        ajax_fields.append('first_name')
        d.append(('Last Name', form.last_name(), 'last_name',
                  form.last_name.errors))
        ajax_fields.append('last_name')
    else:
        d.append(('First Name', Markup('<label>%s</label>' % user.first_name),
                  'first_name', None))
        d.append(('Last Name', Markup('<label>%s</label>' % user.last_name),
                  'last_name', None))

    # Date of Birth
    if self_editing or labstaff_editing or admin_editing:
        d.append(
            ('Date of Birth (MM/DD/YYYY)', form.dob(), 'dob', form.dob.errors))
        ajax_fields.append('dob')
    else:
        d.append(('Date of Birth (MM/DD/YYYY)', user.dob, 'dob', None))

    # Change Password
    if self_editing or labstaff_editing or admin_editing:
        sections.append('Change Password')
        pw_block = []
        display['Change Password'] = pw_block
        if self_editing:
            pw_block.append(('Current Password', form.current_password(),
                             'current_password', form.current_password.errors))
            ajax_fields.append('current_password')
        pw_block.append(('New Password', form.password(), 'password',
                         form.password.errors))
        pw_block.append(('Confirm New Password', form.password(), 'pw_confirm',
                         form.pw_confirm.errors))
        ajax_fields.append('password')
        ajax_fields.append('pw_confirm')

    if self_editing:
        d.append(('Current Password:'******'current_password', form.current_password.errors))
    d.append(('Test', Markup('<a href="test">Test</a>'), 'test', None))

    # form.description.data = user.comments
    # if user.is_disabled():
    #     form.disable.data = True
    # else:
    #     form.disable.data = False

    return render_template("edit_user.html",
                           form=form,
                           edit_user=user,
                           enabled_fields=enabled_fields,
                           display=display,
                           sections=sections)
Exemplo n.º 30
0
class RegisterForm(Form):
    username = TextField('Username',
                         validators=[
                             validators.Required(),
                             validators.Length(min=3, max=8),
                             validators.UniqueColumn(
                                 database.User,
                                 database.User.username,
                                 message='This username is taken.')
                         ])
    password = PasswordField('Password',
                             validators=[
                                 validators.Required(),
                                 validators.Length(min=8, max=50),
                                 validators.CrackLib()
                             ])
    first_name = TextField('First Name', validators=[validators.Required()])
    last_name = TextField('Last Name', validators=[validators.Required()])
    pw_confirm = PasswordField('Confirm Password',
                               validators=[
                                   validators.Required(),
                                   validators.Length(min=8, max=50),
                                   validators.EqualTo(
                                       'password',
                                       message='Passwords do not match.')
                               ])
    dob = TextField('Date of Birth (MM/DD/YYYY)',
                    validators=[
                        validators.Required(),
                        validators.Date(
                            format='%m/%d/%Y',
                            message='Invalid format. Please use mm/dd/yyyy.')
                    ])
    email = TextField(
        'E-mail Address',
        validators=[
            validators.Email(),
            validators.Required(),
            validators.UniqueColumn(
                database.User,
                database.User.email,
                message='This e-mail is in use by another account.')
        ])
    sponsor = SelectField('Sponsor',
                          choices=[(s.username, ''.join(
                              (s.last_name, ', ', s.first_name)))
                                   for s in database.get_sponsors()],
                          validators=[validators.Required()])
    grad_date = TextField('Graduation Date (MM/YYYY)',
                          validators=[
                              validators.Required(),
                              validators.Date(
                                  format='%m/%Y',
                                  message='Invalid format. Please use mm/yyyy')
                          ])
    description = TextAreaField('Description of Usage')
    acct_type = RadioField(choices=[('acad', 'Academic'),
                                    ('research', 'Research & Academic')],
                           validators=[validators.Required()])
    captcha = RecaptchaField(
        public_key='6LdeFcwSAAAAAJF1ccPQ4j5Y0Q0iVULdXpRArpcp',
        private_key='6LdeFcwSAAAAAFv_xLOVLCPAyUQ_abubmG8oUdOw',
        secure=True)