class ProductWidget(SingleSelectField, RPC): javascript = [LocalJSLink('bkr', '/static/javascript/job_product.js')] validator = validators.NotEmpty() params = ['action', 'job_id'] action = '/jobs/update' before = 'job_product_before()' on_complete = 'job_product_complete()' on_success = 'job_product_save_success()' on_failure = 'job_product_save_failure()' validator = validators.NotEmpty() product_deselected = 0 def __init__(self, *args, **kw): self.options = [] self.field_class = 'singleselectfield' def display(self,value=None, *args, **params): params['options'] =[(self.product_deselected, 'No Product')] + \ [(elem.id,elem.name) for elem in model.Product.query.order_by(model.Product.name).all()] return super(ProductWidget,self).display(value,**params) def update_params(self, d): super(ProductWidget, self).update_params(d) d['attrs']['id'] = 'job_product' d['attrs']['class'] = 'input-block-level' d['attrs']['onchange'] = "ProductChange('%s',%s, %s)" % ( url(d.get('action')), jsonify_for_html({'id': d.get('job_id')}), jsonify_for_html(self.get_options(d)), )
class RetentionTagWidget(SingleSelectField, RPC): #FIXME perhaps I shoudl create a parent that both Retention and Priority inherit from javascript = [LocalJSLink('bkr', '/static/javascript/job_retentiontag.js')] validator = validators.NotEmpty() params = ['action', 'job_id'] action = '/jobs/update' before = 'job_retentiontag_before()' on_complete = 'job_retentiontag_complete()' on_success = 'job_retentiontag_save_success()' on_failure = 'job_retentiontag_save_failure()' def __init__(self, *args, **kw): self.options = [] self.field_class = 'singleselectfield' def display(self,value=None, **params): params['options'] = [(elem.id,elem.tag) for elem in model.RetentionTag.query.all()] return super(RetentionTagWidget,self).display(value, **params) def update_params(self, d): super(RetentionTagWidget, self).update_params(d) d['attrs']['id'] = 'job_retentiontag' d['attrs']['onchange'] = "RetentionTagChange('%s',%s, %s)" % ( url(d.get('action')), jsonify_for_html({'id': d.get('job_id')}), jsonify_for_html(self.get_options(d)), )
class FieldsSchema(validators.Schema): chained_validators = [validators.FieldsMatch('passwd', 'passwd2')] name = validators.UnicodeString() age = validators.Int() passwd = validators.NotEmpty() passwd2 = validators.UnicodeString()
class CommentCaptchaForm(Form): template = "bodhi.templates.captchacommentform" submit_text = "Add Comment" fields = [ TextArea(name='text', label='', validator=validators.All( validators.NotEmpty(), validators.UnicodeString()), rows=3, cols=40), HiddenField(name='title', validator=validators.All( validators.NotEmpty(), validators.UnicodeString())), TextField(name='author', label='Author', default='E-Mail Address', validator=validators.Email()), CaptchaField(name='captcha', label='Enter the code shown') ]
def __init__(self, *args, **kw): super(SystemInstallOptions, self).__init__(*args, **kw) self.id = HiddenField(name="id") self.prov_arch = SingleSelectField(name='prov_arch', label=_(u'Arch'), options=[], validator=validators.NotEmpty()) self.prov_osmajor = SingleSelectField(name='prov_osmajor', label=_(u'Family'), options=lambda: [(0, 'All')] + [(m.id, m.osmajor) for m in model.OSMajor.ordered_by_osmajor()], validator=validators.NotEmpty()) self.prov_osversion = SingleSelectField(name='prov_osversion', label=_(u'Update'), options=[(0,u'All')], validator=validators.NotEmpty()) self.prov_ksmeta = TextField(name='prov_ksmeta', label=_(u'Kickstart Metadata')) self.prov_koptions = TextField(name='prov_koptions', label=_(u'Kernel Options')) self.prov_koptionspost = TextField(name='prov_koptionspost', label=_(u'Kernel Options Post'))
def test_checkbox(): """A CheckBox has not a value and is not checked by default""" w = widgets.CheckBox("foo") output = w.render(format='xhtml') assert 'name="foo"' in output assert 'value' not in output assert 'checked' not in output output = w.render(value=True, format='xhtml') assert 'checked' in output w = widgets.CheckBox("foo", default=True) output = w.render(format='xhtml') assert 'checked' in output output = w.render(value=False, format='xhtml') assert 'checked' not in output #CheckBox should accept alternate validators value = w.validator.to_python('checked') assert value == True w = widgets.CheckBox("foo", validator=validators.NotEmpty()) value = w.validator.to_python('checked') assert value == 'checked'
class JobMatrixReport(Form): javascript = [LocalJSLink('bkr','/static/javascript/jquery-ui-1.9.2.min.js', order=3), LocalJSLink('bkr', '/static/javascript/job_matrix_v2.js')] css = [LocalCSSLink('bkr', '/static/css/smoothness/jquery-ui.css'),] template = 'bkr.server.templates.job_matrix' member_widgets = ['whiteboard','job_ids','generate_button','nack_list', 'whiteboard_filter', 'whiteboard_filter_button'] params = (['list', 'whiteboard_options','job_ids_vals', 'nacks','comments_field','toggle_nacks_on']) default_validator = validators.NotEmpty() def __init__(self,*args,**kw): super(JobMatrixReport,self).__init__(*args, **kw) self.class_name = self.__class__.__name__ self.nack_list = CheckBoxList("Hide naks",validator=self.default_validator) self.whiteboard = MultipleSelectField('whiteboard', label='Whiteboard', attrs={'size':5, 'class':'whiteboard'}, validator=self.default_validator) self.job_ids = TextArea('job_ids',label='Job ID', rows=7,cols=7, validator=self.default_validator) self.whiteboard_filter = TextField('whiteboard_filter', label='Filter by') self.whiteboard_filter_button = MyButton(name='do_filter', type='button') self.name='remote_form' self.action = '.' def display(self,**params): if 'options' in params: if 'whiteboard_options' in params['options']: params['whiteboard_options'] = params['options']['whiteboard_options'] else: params['whiteboard_options'] = [] if 'job_ids_vals' in params['options']: params['job_ids_vals'] = params['options']['job_ids_vals'] if 'grid' in params['options']: params['grid'] = params['options']['grid'] if 'list' in params['options']: params['list'] = params['options']['list'] if 'nacks' in params['options']: params['nacks'] = params['options']['nacks'] if 'toggle_nacks_on' in params['options']: params['toggle_nacks_on'] = params['options']['toggle_nacks_on'] return super(JobMatrixReport,self).display(**params)
class ReportProblemForm(RemoteForm): template = 'bkr.server.templates.report_problem_form' fields=[ TextArea(name='description', label='Description of problem', validator=validators.NotEmpty())] desc = 'Report Problem' submit = Button(name='submit') submit_text = 'Report' member_widgets = ['submit'] params = ['system', 'recipe'] name = 'problem' on_success = 'success(\'Your problem has been reported, Thank you\')' on_failure = 'failure(\'We were unable to report your problem at this time\')' def update_params(self, d): super(ReportProblemForm, self).update_params(d) d['system'] = d['options']['system'] d['recipe'] = d['options'].get('recipe') d['hidden_fields'] = [] d['hidden_fields'].append(HiddenField(name='system', attrs= {'value' : d['system'] })) if d['recipe']: d['hidden_fields'].append(HiddenField(name='recipe_id', attrs={'value' : d['recipe'].id})) d['submit'].attrs.update({'onClick' : "return ! system_action_remote_form_request('%s', %s, '%s');" % ( d['options']['name'], jsonify_for_html(self.get_options(d)), d['action'])})
class ExternalReportsController(RPCRoot): id = HiddenField(name='id') name = TextField(name='name', label=_(u'Report Name'), attrs={'maxlength': 100}, validator=validators.NotEmpty()) url = TextField(name='url', label=_(u'URL'), attrs={'maxlength': 10000}, validator=validators.NotEmpty()) description = TextArea(name='description', label=_(u'Description'), attrs={ 'cols': '27', 'rows': '10' }) external_report_form = TableForm( fields=[id, name, url, description], submit_text=_(u'Save'), ) delete_link = DeleteLinkWidgetForm() @expose('bkr.server.templates.external_reports') def index(self): all_reports = ExternalReport.query.all() if not all_reports: all_reports = [] return dict( action=url('new'), delete_link=self.delete_link, title='External Reports', value=all_reports, ) @identity.require(identity.in_group('admin')) @expose(template='bkr.server.templates.form-post') def new(self, **kw): return dict( form=self.external_report_form, action=url('save'), options=None, value=kw, title='New External Report', ) @identity.require(identity.in_group("admin")) @expose('bkr.server.templates.form-post') def edit(self, id=None, **kw): return dict( form=self.external_report_form, action=url('save'), options={}, title='Edit External Report', value=id and ExternalReport.by_id(id) or kw, ) @identity.require(identity.in_group("admin")) @expose() def delete(self, id): report = ExternalReport.by_id(id) report_name = report.name session.delete(report) flash(_(u'Deleted report %s' % report_name)) redirect('.') @identity.require(identity.in_group("admin")) @expose() @validate(external_report_form) @error_handler(edit) def save(self, **kw): if kw.get('id'): report = ExternalReport.by_id(kw['id']) else: report = ExternalReport() report.name = kw.get('name') report.url = kw.get('url') report.description = kw.get('description') session.add(report) flash(_(u"%s saved" % report.name)) redirect(".")
def __init__(self, table, search_controller=None, extra_selects=None, extra_inputs=None, extra_hiddens=None, enable_custom_columns=False, *args, **kw): super(SearchBar,self).__init__(*args, **kw) self.enable_custom_columns = enable_custom_columns self.search_controller=search_controller self.repetitions = 1 self.extra_hiddens = extra_hiddens self.default_result_columns = {} table_field = SingleSelectFieldJSON(name="table", options=sorted(table.keys()), validator=validators.NotEmpty()) operation_field = SingleSelectFieldJSON(name="operation", options=[None], validator=validators.NotEmpty()) value_field = TextFieldJSON(name="value") self.fields = [table_field, operation_field, value_field] new_selects = [] self.extra_callbacks = {} self.search_object = jsonify_for_html(table) if extra_selects is not None: new_class = [] for elem in extra_selects: if elem.has_key('display'): if elem['display'] == 'none': new_class.append('hide_parent') callback = elem.get('callback',None) if callback: self.extra_callbacks[elem['name']] = callback new_select = SingleSelectFieldJSON(name=elem['name'],options=[None], css_classes = new_class, validator=validators.NotEmpty(),for_column=elem['column'] ) if elem['name'] == 'keyvalue': self.keyvaluevalue = new_select if elem.has_key('pos'): self.fields.insert(elem['pos'] - 1,new_select) else: self.fields.append(new_select) new_inputs = [] if extra_inputs is not None: for the_name in extra_inputs: new_input = TextField(name=the_name,display='none') new_inputs.append(new_input) if 'simplesearch_label' in kw: self.simplesearch_label = kw['simplesearch_label'] else: self.simplesearch_label = 'Search' self.quickly_searches = [] if 'quick_searches' in kw: if kw['quick_searches'] is not None: for elem,name in kw['quick_searches']: vals = elem.split('-') if len(vals) != 3: log.error('Quick searches expects vals as <column>-<operation>-<value>. The following is incorrect: %s' % (elem)) else: self.quickly_searches.append((name, '%s-%s-%s' % (vals[0],vals[1],vals[2]))) self.date_picker = jsonify_for_html(kw.get('date_picker',list()) ) controllers = kw.get('table_search_controllers',dict()) self.table_search_controllers_stringified = str(controllers) self.extra_callbacks_stringified = str(self.extra_callbacks) self.fields.extend(new_inputs) self.fields.extend(new_selects)
class Fields(widgets.WidgetsList): name = widgets.TextField(validator=validators.UnicodeString()) age = widgets.TextField(validator=validators.Int()) passwd = widgets.PasswordField(validator=validators.NotEmpty()) passwd2 = widgets.PasswordField(validator=validators.UnicodeString())