class FieldTypeGuesserTestCase(TestCase): def setUp(self): self.instance = FieldTypeGuesser(fake) def test_guess_with_datetime(self): generator = self.instance.guess_format(models.DateTimeField()) with django_setting('USE_TZ', True): value = generator(datetime.now()) self.assertTrue(timezone.is_aware(value)) with django_setting('USE_TZ', False): value = generator(datetime.now()) self.assertFalse(timezone.is_aware(value)) def test_guess_json_format(self): import json try: from django.db.models import JSONField except ImportError: from django.contrib.postgres.fields import JSONField generator = self.instance.guess_format(JSONField()) result = generator({}, data_columns={'name': 'first_name_nonbinary'}, num_rows=1) self.assertIn('name', json.loads(result))
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in self.model._meta.fields: field_name = field.name if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)): formatters[field_name] = self.build_relation( field, field.rel.to) continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue return formatters
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} model = self.model name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in model._meta.fields: field_name = field.name if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)): formatters[field_name] = self.build_relation(field, field.rel.to) continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue return formatters
def guess_field_formatters(self, faker, formatters=None): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object :param formatters: this is 'customFieldFormatters' - optional dict with field as key and callable as value :type formatters: dict or None """ if not formatters: formatters = {} name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in self.model._meta.fields: field_name = field.name if field.primary_key: continue # If user provides dict with data in 'seeder.add_entity(Model, num, data)', no reason to guess format. # Also user can provide field which is not covered in FieldTypeGuesser and 'raise AttributeError(field)' # will not be raised. if field_name in formatters: continue if field.get_default(): formatters[field_name] = field.get_default() continue if isinstance(field, OneToOneField): existing = set() formatters[field_name] = self.build_one_relation( field, field.related_model, existing) continue if isinstance(field, ForeignKey): formatters[field_name] = self.build_relation( field, field.related_model) continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue for field in self.model._meta.many_to_many: self.many_relations[field.name] = self.build_many_relation( field, field.related_model) return formatters
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in self.model._meta.fields: field_name = field.name if field.get_default(): formatters[field_name] = field.get_default() continue if isinstance(field, OneToOneField): existing = set() formatters[field_name] = self.build_one_relation(field, field.related_model, existing) continue if isinstance(field, ForeignKey): formatters[field_name] = self.build_relation(field, field.related_model) continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue for field in self.model._meta.many_to_many: self.many_relations[field.name] = self.build_many_relation(field, field.related_model) return formatters
def guess_field_formatters(self, faker): """ Gets the formatter methods for each field using the guessers or related object fields :param faker: Faker factory object """ formatters = {} model = self.model name_guesser = NameGuesser(faker) field_type_guesser = FieldTypeGuesser(faker) for field in model._meta.fields: field_name = field.name if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)): related_model = field.rel.to def build_relation(inserted): if related_model in inserted and inserted[related_model]: pk = random.choice(inserted[related_model]) return related_model.objects.get(pk=pk) else: message = 'Field {} cannot be null'.format(field) raise SeederException(message) formatters[field_name] = build_relation continue if isinstance(field, AutoField): continue if not field.choices: formatter = name_guesser.guess_format(field_name) if formatter: formatters[field_name] = formatter continue formatter = field_type_guesser.guess_format(field) if formatter: formatters[field_name] = formatter continue return formatters
class FieldTypeGuesserTestCase(TestCase): def setUp(self): self.instance = FieldTypeGuesser(fake) def test_guess_with_datetime(self): generator = self.instance.guess_format(models.DateTimeField()) with django_setting('USE_TZ', True): value = generator(datetime.now()) self.assertTrue(timezone.is_aware(value)) with django_setting('USE_TZ', False): value = generator(datetime.now()) self.assertFalse(timezone.is_aware(value)) @skipIf(django_version[0] < 2, "JSONField does not work with Django 1.11") def test_guess_not_in_format(self): from django.contrib.postgres.fields.jsonb import JSONField # postgres native JSONField has the _default_hint generator = self.instance.guess_format(JSONField()) self.assertEquals(generator({}), '{}')
class FieldTypeGuesserTestCase(TestCase): def setUp(self): self.instance = FieldTypeGuesser(fake) def test_guess_with_datetime(self): generator = self.instance.guess_format(models.DateTimeField()) with django_setting('USE_TZ', True): value = generator(datetime.now()) self.assertTrue(timezone.is_aware(value)) with django_setting('USE_TZ', False): value = generator(datetime.now()) self.assertFalse(timezone.is_aware(value))
def setUp(self): self.instance = FieldTypeGuesser(fake)