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, '<')
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'])
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'])
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"])
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 == "<"
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
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'])
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