Beispiel #1
0
    def test_several_fields(self):
        field1 = form_fields.DateTimeField()
        cleaned_value1 = field1.clean(['>12/31/2012 10:20:30'])

        field2 = form_fields.DateTimeField()
        cleaned_value2 = field2.clean(['<12/31/2012 10:20:40'])

        eq_(cleaned_value1, [datetime.datetime(2012, 12, 31, 10, 20, 30)])
        eq_(field1.prefixed_value, ['>2012-12-31T10:20:30'])

        eq_(cleaned_value2, [datetime.datetime(2012, 12, 31, 10, 20, 40)])
        eq_(field2.prefixed_value, ['<2012-12-31T10:20:40'])

        eq_(field1.operator, '>')
        eq_(field2.operator, '<')
Beispiel #2
0
    def test_several_fields_illogically_datetimefield(self):
        field = form_fields.DateTimeField()
        assert_raises(ValidationError, field.clean,
                      ['>2016-08-10', '<2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['<2016-08-10', '<2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['>=2016-08-10', '<2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['>2016-08-10', '<=2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['>=2016-08-10', '<=2016-08-09'])
        # but note, this should work!
        field.clean(['>=2016-08-10', '<=2016-08-10'])

        # any use of the equal sign and a less or greater than
        assert_raises(ValidationError, field.clean,
                      ['=2016-08-10', '<2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['=2016-08-10', '>2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['>2016-08-10', '=2016-08-10'])
        assert_raises(ValidationError, field.clean,
                      ['<2016-08-10', '=2016-08-10'])

        # more than two fields
        assert_raises(ValidationError, field.clean,
                      ['>2016-08-01', '<=2016-08-02', '>=2016-08-02'])
        assert_raises(ValidationError, field.clean,
                      ['<2016-08-01', '<2016-08-02', '<2016-08-03'])
Beispiel #3
0
 def test_datetime_field(self):
     field = form_fields.DateTimeField()
     cleaned_value = field.clean(['>12/31/2012 10:20:30'])
     dt = datetime.datetime(2012, 12, 31, 10, 20, 30)
     dt = dt.replace(tzinfo=utc)
     eq_(cleaned_value, [dt])
     eq_(field.prefixed_value, ['>2012-12-31T10:20:30+00:00'])
Beispiel #4
0
    def test_several_fields_illogically_datetimefield(self):
        field = form_fields.DateTimeField()
        with pytest.raises(ValidationError):
            field.clean([">2016-08-10", "<2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean(["<2016-08-10", "<2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean([">=2016-08-10", "<2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean([">2016-08-10", "<=2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean([">=2016-08-10", "<=2016-08-09"])

        # but note, this should work!
        field.clean([">=2016-08-10", "<=2016-08-10"])

        # any use of the equal sign and a less or greater than
        with pytest.raises(ValidationError):
            field.clean(["=2016-08-10", "<2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean(["=2016-08-10", ">2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean([">2016-08-10", "=2016-08-10"])
        with pytest.raises(ValidationError):
            field.clean(["<2016-08-10", "=2016-08-10"])

        # more than two fields
        with pytest.raises(ValidationError):
            field.clean([">2016-08-01", "<=2016-08-02", ">=2016-08-02"])
        with pytest.raises(ValidationError):
            field.clean(["<2016-08-01", "<2016-08-02", "<2016-08-03"])
Beispiel #5
0
    def test_several_fields(self):
        field1 = form_fields.DateTimeField()
        cleaned_value1 = field1.clean([">12/31/2012 10:20:30"])

        field2 = form_fields.DateTimeField()
        cleaned_value2 = field2.clean(["<12/31/2012 10:20:40"])

        dt = datetime.datetime(2012, 12, 31, 10, 20, 30)
        dt = dt.replace(tzinfo=utc)
        assert cleaned_value1 == [dt]
        assert field1.prefixed_value == [">2012-12-31T10:20:30+00:00"]

        dt = datetime.datetime(2012, 12, 31, 10, 20, 40)
        dt = dt.replace(tzinfo=utc)
        assert cleaned_value2 == [dt]
        assert field2.prefixed_value == ["<2012-12-31T10:20:40+00:00"]

        assert field1.operator == ">"
        assert field2.operator == "<"
Beispiel #6
0
    def test_datetime_field(self):
        field = form_fields.DateTimeField()
        cleaned_value = field.clean([">12/31/2012 10:20:30"])
        dt = datetime.datetime(2012, 12, 31, 10, 20, 30)
        dt = dt.replace(tzinfo=utc)
        assert cleaned_value == [dt]
        assert field.prefixed_value == [">2012-12-31T10:20:30+00:00"]

        field = form_fields.DateTimeField()
        cleaned_value = field.clean([">=2012-12-31"])
        dt = datetime.datetime(2012, 12, 31)
        dt = dt.replace(tzinfo=utc)
        assert cleaned_value == [dt]
        assert field.prefixed_value == [">=2012-12-31T00:00:00+00:00"]

        field = form_fields.DateTimeField()
        cleaned_value = field.clean([">=2012-12-31T01:02:03+00:00"])
        dt = datetime.datetime(2012, 12, 31, 1, 2, 3)
        dt = dt.replace(tzinfo=utc)
        assert cleaned_value == [dt]
        assert field.prefixed_value == [">=2012-12-31T01:02:03+00:00"]
class SearchForm(forms.Form):
    '''Handle the data populating the search form. '''

    # Processed crash fields.
    address = form_fields.StringField(required=False)
    app_notes = form_fields.MultipleValueField(required=False)
    build_id = form_fields.IntegerField(required=False)
    cpu_info = form_fields.StringField(required=False)
    cpu_name = form_fields.MultipleValueField(required=False)
    date = form_fields.DateTimeField(required=False)
    distributor = form_fields.MultipleValueField(required=False)
    distributor_version = form_fields.MultipleValueField(required=False)
    dump = form_fields.StringField(required=False)
    flash_version = form_fields.MultipleValueField(required=False)
    install_age = form_fields.IntegerField(required=False)
    java_stack_trace = form_fields.MultipleValueField(required=False)
    last_crash = form_fields.IntegerField(required=False)
    platform = form_fields.MultipleValueField(required=False)
    platform_version = form_fields.MultipleValueField(required=False)
    plugin_name = form_fields.MultipleValueField(required=False)
    plugin_filename = form_fields.MultipleValueField(required=False)
    plugin_version = form_fields.MultipleValueField(required=False)
    processor_notes = form_fields.MultipleValueField(required=False)
    product = form_fields.MultipleValueField(required=False)
    productid = form_fields.MultipleValueField(required=False)
    reason = form_fields.StringField(required=False)
    release_channel = form_fields.MultipleValueField(required=False)
    signature = form_fields.StringField(required=False)
    topmost_filenames = form_fields.MultipleValueField(required=False)
    uptime = form_fields.IntegerField(required=False)
    user_comments = form_fields.StringField(required=False)
    version = form_fields.MultipleValueField(required=False)
    winsock_lsp = form_fields.MultipleValueField(required=False)

    # Raw crash fields.
    accessibility = form_fields.BooleanField(required=False)
    additional_minidumps = form_fields.MultipleValueField(required=False)
    adapter_device_id = form_fields.MultipleValueField(required=False)
    adapter_vendor_id = form_fields.MultipleValueField(required=False)
    android_board = form_fields.MultipleValueField(required=False)
    android_brand = form_fields.MultipleValueField(required=False)
    android_cpu_abi = form_fields.MultipleValueField(required=False)
    android_cpu_abi2 = form_fields.MultipleValueField(required=False)
    android_device = form_fields.MultipleValueField(required=False)
    android_display = form_fields.MultipleValueField(required=False)
    android_fingerprint = form_fields.MultipleValueField(required=False)
    android_hardware = form_fields.MultipleValueField(required=False)
    android_manufacturer = form_fields.MultipleValueField(required=False)
    android_model = form_fields.StringField(required=False)
    android_version = form_fields.MultipleValueField(required=False)
    async_shutdown_timeout = form_fields.MultipleValueField(required=False)
    available_page_file = form_fields.IntegerField(required=False)
    available_physical_memory = form_fields.IntegerField(required=False)
    available_virtual_memory = form_fields.IntegerField(required=False)
    b2g_os_version = form_fields.MultipleValueField(required=False)
    bios_manufacturer = form_fields.MultipleValueField(required=False)
    cpu_usage_flash_process1 = form_fields.IntegerField(required=False)
    cpu_usage_flash_process2 = form_fields.IntegerField(required=False)
    dom_ipc_enabled = form_fields.BooleanField(required=False)
    em_check_compatibility = form_fields.BooleanField(required=False)
    frame_poison_base = form_fields.MultipleValueField(required=False)
    frame_poison_size = form_fields.IntegerField(required=False)
    is_garbage_collecting = form_fields.BooleanField(required=False)
    min_arm_version = form_fields.MultipleValueField(required=False)
    number_of_processors = form_fields.IntegerField(required=False)
    oom_allocation_size = form_fields.IntegerField(required=False)
    plugin_cpu_usage = form_fields.IntegerField(required=False)
    plugin_hang = form_fields.BooleanField(required=False)
    plugin_hang_ui_duration = form_fields.IntegerField(required=False)
    startup_time = form_fields.IntegerField(required=False)
    system_memory_use_percentage = form_fields.IntegerField(required=False)
    throttleable = form_fields.BooleanField(required=False)
    throttle_rate = form_fields.IntegerField(required=False)
    theme = form_fields.MultipleValueField(required=False)
    total_virtual_memory = form_fields.IntegerField(required=False)
    useragent_locale = form_fields.MultipleValueField(required=False)
    vendor = form_fields.MultipleValueField(required=False)

    process_type = form_fields.MultipleValueField(
        required=False,
        choices=make_restricted_choices(settings.PROCESS_TYPES,
                                        ['any', 'all']))
    hang_type = form_fields.MultipleValueField(required=False,
                                               choices=make_restricted_choices(
                                                   settings.HANG_TYPES,
                                                   ['any', 'all']))

    def __init__(self, current_products, current_versions, current_platforms,
                 pii_mode, exploitability_mode, *args, **kwargs):
        super(self.__class__, self).__init__(*args, **kwargs)

        # Default values
        platforms = [(x['name'], x['name']) for x in current_platforms]
        products = [(x, x) for x in current_products]
        versions = [(v['version'], v['version']) for v in current_versions]

        self.fields['product'].choices = products
        self.fields['version'].choices = versions
        self.fields['platform'].choices = platforms

        if pii_mode:
            self.fields.update(PII_RESTRICTED_FIELDS)

        if exploitability_mode:
            self.fields.update(EXPLOITABILITY_RESTRICTED_FIELDS)

    def get_fields_list(self):
        '''Return a dictionary describing the fields, to pass to the
        dynamic_form.js library. '''
        fields_list = {}

        for field_name in self.fields:
            field = self.fields[field_name]
            try:
                values = [x[0] for x in field.choices]
            except AttributeError:
                values = None
            multiple = True
            extensible = True

            if isinstance(field, (forms.DateField, forms.DateTimeField)):
                field_type = 'date'
            elif isinstance(field, forms.IntegerField):
                field_type = 'int'
            elif isinstance(field, form_fields.BooleanField):
                field_type = 'bool'
            else:
                field_type = 'string'

            if field_type == 'int':
                value_type = 'number'
            elif field_type == 'date':
                value_type = 'date'
            elif field_type == 'bool':
                value_type = 'bool'
            elif isinstance(field, form_fields.StringField):
                value_type = 'string'
            else:
                value_type = 'enum'

            fields_list[field_name] = {
                'name': field_name.replace('_', ' '),
                'type': field_type,
                'valueType': value_type,
                'values': values,
                'multiple': multiple,
                'extensible': extensible,
            }

        return fields_list
Beispiel #8
0
 def test_datetime_field(self):
     field = form_fields.DateTimeField()
     cleaned_value = field.clean(['>12/31/2012 10:20:30'])
     eq_(cleaned_value, [datetime.datetime(2012, 12, 31, 10, 20, 30)])
     eq_(field.prefixed_value, ['>2012-12-31T10:20:30'])
Beispiel #9
0
class SearchForm(forms.Form):
    '''Handle the data populating the search form. '''

    address = form_fields.StringField(required=False)
    app_notes = form_fields.MultipleValueField(required=False)
    build_id = form_fields.IntegerField(required=False)
    cpu_info = form_fields.StringField(required=False)
    cpu_name = form_fields.MultipleValueField(required=False)
    date = form_fields.DateTimeField(required=False)
    distributor = form_fields.MultipleValueField(required=False)
    distributor_version = form_fields.MultipleValueField(required=False)
    dump = form_fields.StringField(required=False)
    flash_version = form_fields.MultipleValueField(required=False)
    install_age = form_fields.IntegerField(required=False)
    java_stack_trace = form_fields.MultipleValueField(required=False)
    last_crash = form_fields.IntegerField(required=False)
    platform = form_fields.MultipleValueField(required=False)
    platform_version = form_fields.MultipleValueField(required=False)
    plugin_name = form_fields.MultipleValueField(required=False)
    plugin_filename = form_fields.MultipleValueField(required=False)
    plugin_version = form_fields.MultipleValueField(required=False)
    processor_notes = form_fields.MultipleValueField(required=False)
    product = form_fields.MultipleValueField(required=False)
    productid = form_fields.MultipleValueField(required=False)
    reason = form_fields.StringField(required=False)
    release_channel = form_fields.MultipleValueField(required=False)
    signature = form_fields.StringField(required=False)
    topmost_filenames = form_fields.MultipleValueField(required=False)
    uptime = form_fields.IntegerField(required=False)
    user_comments = form_fields.StringField(required=False)
    version = form_fields.MultipleValueField(required=False)
    winsock_lsp = form_fields.MultipleValueField(required=False)

    # TODO: This doesn't work and needs to be fixed.
    # Pending on https://bugzilla.mozilla.org/show_bug.cgi?id=919559
    # process_type = forms.ChoiceField(
    #     required=False,
    #     choices=make_choices(settings.PROCESS_TYPES)
    # )
    # hang_type = forms.ChoiceField(
    #     required=False,
    #     choices=make_choices(settings.HANG_TYPES)
    # )

    def __init__(
        self,
        current_products,
        current_versions,
        current_platforms,
        pii_mode,
        *args,
        **kwargs
    ):
        super(self.__class__, self).__init__(*args, **kwargs)

        # Default values
        platforms = [(x['name'], x['name']) for x in current_platforms]
        products = [(x, x) for x in current_products]
        versions = [
            (v['version'], v['version']) for v in current_versions
        ]

        self.fields['product'].choices = products
        self.fields['version'].choices = versions
        self.fields['platform'].choices = platforms

        if pii_mode:
            self.fields.update(PII_RESTRICTED_FIELDS)

    def get_fields_list(self):
        '''Return a dictionary describing the fields, to pass to the
        dynamic_form.js library. '''
        fields_list = {}

        for field_name in self.fields:
            field = self.fields[field_name]
            try:
                values = [x[0] for x in field.choices]
            except AttributeError:
                values = None
            multiple = True
            extensible = True

            if isinstance(field, (forms.DateField, forms.DateTimeField)):
                field_type = 'date'
            elif isinstance(field, forms.IntegerField):
                field_type = 'int'
            else:
                field_type = 'string'

            if field_type == 'int':
                value_type = 'number'
            elif field_type == 'date':
                value_type = 'date'
            elif isinstance(field, form_fields.StringField):
                value_type = 'string'
            else:
                value_type = 'enum'

            fields_list[field_name] = {
                'name': field_name.replace('_', ' '),
                'type': field_type,
                'valueType': value_type,
                'values': values,
                'multiple': multiple,
                'extensible': extensible,
            }

        return fields_list