예제 #1
0
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)),
            )
예제 #2
0
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)),
            )
예제 #3
0
    class FieldsSchema(validators.Schema):
        chained_validators = [validators.FieldsMatch('passwd', 'passwd2')]

        name = validators.UnicodeString()
        age = validators.Int()
        passwd = validators.NotEmpty()
        passwd2 = validators.UnicodeString()
예제 #4
0
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')
    ]
예제 #5
0
 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'))
예제 #6
0
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'
예제 #7
0
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)
예제 #8
0
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'])})
예제 #9
0
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(".")
예제 #10
0
    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) 
예제 #11
0
 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())