예제 #1
0
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))
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
    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
예제 #8
0
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({}), '{}')
예제 #9
0
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))
예제 #10
0
파일: tests.py 프로젝트: Brobin/django-seed
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))
예제 #11
0
 def setUp(self):
     self.instance = FieldTypeGuesser(fake)
예제 #12
0
파일: tests.py 프로젝트: Brobin/django-seed
 def setUp(self):
     self.instance = FieldTypeGuesser(fake)