Beispiel #1
0
class ProjectAutoFixture(AutoFixture):

    field_values = {
        'name': generators.CallableGenerator(fake.company),
        'slug': generators.CallableGenerator(fake.slug),
        'image': generators.ImageGenerator(sizes=IMAGESIZES),
        'is_draft': generators.ChoicesGenerator(values=[True, False, False]),
    }
Beispiel #2
0
class ChallengeAutoFixture(AutoFixture):
    field_values = {
        'points':
        generators.CallableGenerator(lambda *args, **kwargs: next(points)),
        'name':
        generators.CallableGenerator(lambda *args, **kwargs: next(names)),
        'key':
        generators.CallableGenerator(lambda *args, **kwargs: next(keys)),
    }
Beispiel #3
0
class OrganisationTranslationsAutoFixture(AutoFixture):

    field_values = {
        'title': generators.CallableGenerator(fake.company),
        'description_why': generators.CallableGenerator(fake.text),
        'description_how': generators.CallableGenerator(fake.text),
        'description': generators.CallableGenerator(fake.text),
        'language_code': 'en',
    }

    follow_fk = True
Beispiel #4
0
class IdeaAutoFixture(AutoFixture):

    IMAGESIZES = ((1300, 600), )

    field_values = {
        'name': generators.CallableGenerator(fake.company),
        'description': generators.CallableGenerator(fake.text),
        'image': generators.ImageGenerator(sizes=IMAGESIZES),
    }

    follow_pk = True
Beispiel #5
0
class OrganisationAutoFixture(AutoFixture):

    IMAGESIZES = ((1300, 600), )
    LOGOSIZES = ((400, 400), )

    field_values = {
        'name': generators.CallableGenerator(fake.company),
        'slug': generators.CallableGenerator(fake.slug),
        'image': generators.ImageGenerator(sizes=IMAGESIZES),
        'logo': generators.ImageGenerator(sizes=LOGOSIZES),
        'place': generators.CallableGenerator(fake.city),
        'facebook_handle': 'LIQDeV',
        'twitter_handle': 'bunnybuddhism',
        'instragram_handle': 'insta.plane',
        'webpage': 'https://example.com',
    }
Beispiel #6
0
class PhaseAutoFixture(AutoFixture):
    field_values = {
        'name': generators.CallableGenerator(fake.company),
        'type': generators.ChoicesGenerator(choices=content.as_choices()),
    }

    follow_pk = True

    constraints = (only_two_phases_per_module)
Beispiel #7
0
class UserProfileAutoFixture(AutoFixture):

    field_values = {
        'team':
        generators.CallableGenerator(lambda *args, **kwargs: next(teams)),
        'skills': generators.CallableGenerator(set_skill)
    }

    def post_process_instance(self, instance, commit=True):
        # created date
        instance.created_at = now() - timedelta(days=30)

        # solved challenges
        for challenge in Challenge.objects.filter(pk__gt=instance.pk):
            solved = ChallengeSolved.objects.create(user=instance,
                                                    challenge=challenge)
            start = instance.created_at
            solved.datetime = start + (now() - start) * random.random()
            solved.save()

        # random image
        """
        gender = 'men' if instance.gender == 'M' else 'women'
        image_url = 'https://randomuser.me/api/portraits/{}/{}.jpg'.format(gender, instance.id)
        try:
            response = requests.get(image_url)
        except requests.HTTPError as e:
            print(e)
            return instance

        instance.image.save(
            os.path.basename('image_{}.jpg'.format(instance.id)),
            BytesIO(response.content)
        )
        """
        instance.image = 'accounts/' + ('image_{}.jpg'.format(instance.id)
                                        if instance.id < 50 else 'user.png')

        if commit:
            instance.save()

        return instance
Beispiel #8
0
class UserAutoFixture(AutoFixture):

    field_values = {
        'username': generators.CallableGenerator(fake.name),
        '_avatar': None
    }
Beispiel #9
0
    def get_generator(self, field):
        '''
        Return a value generator based on the field instance that is passed to
        this method. This function may return ``None`` which means that the
        specified field will be ignored (e.g. if no matching generator was
        found).
        '''
        if isinstance(field, fields.AutoField):
            return None
        if self.is_inheritance_parent(field):
            return None
        if (
            field.default is not fields.NOT_PROVIDED and
            not self.overwrite_defaults and
            field.name not in self.field_values):
                return None
        kwargs = {}

        if field.name in self.field_values:
            value = self.field_values[field.name]
            if isinstance(value, generators.Generator):
                return value
            elif isinstance(value, AutoFixture):
                return generators.InstanceGenerator(autofixture=value)
            elif callable(value):
                return generators.CallableGenerator(value=value)
            return generators.StaticGenerator(value=value)

        if field.null:
            kwargs['empty_p'] = self.none_p
        if field.choices:
            return generators.ChoicesGenerator(choices=field.choices, **kwargs)
        if isinstance(field, related.ForeignKey):
            # if generate_fk is set, follow_fk is ignored.
            is_self_fk = (get_remote_field_to(field)().__class__ == self.model)
            if field.name in self.generate_fk and not is_self_fk:
                return generators.InstanceGenerator(
                    autofixture.get(
                        get_remote_field_to(field),
                        follow_fk=self.follow_fk.get_deep_links(field.name),
                        generate_fk=self.generate_fk.get_deep_links(field.name)),
                    limit_choices_to=get_remote_field(field).limit_choices_to)
            if field.name in self.follow_fk:
                selected = generators.InstanceSelector(
                    get_remote_field_to(field),
                    limit_choices_to=get_remote_field(field).limit_choices_to)
                if selected.get_value() is not None:
                    return selected
            if field.blank or field.null:
                return generators.NoneGenerator()
            if is_self_fk and not field.null:
                raise CreateInstanceError(
                    u'Cannot resolve self referencing field "%s" to "%s" without null=True' % (
                        field.name,
                        '%s.%s' % (
                            get_remote_field_to(field)._meta.app_label,
                            get_remote_field_to(field)._meta.object_name,
                        )
                ))
            raise CreateInstanceError(
                u'Cannot resolve ForeignKey "%s" to "%s". Provide either '
                u'"follow_fk" or "generate_fk" parameters.' % (
                    field.name,
                    '%s.%s' % (
                        get_remote_field_to(field)._meta.app_label,
                        get_remote_field_to(field)._meta.object_name,
                    )
            ))
        if isinstance(field, related.ManyToManyField):
            if field.name in self.generate_m2m:
                min_count, max_count = self.generate_m2m[field.name]
                return generators.MultipleInstanceGenerator(
                    autofixture.get(get_remote_field_to(field)),
                    limit_choices_to=get_remote_field(field).limit_choices_to,
                    min_count=min_count,
                    max_count=max_count,
                    **kwargs)
            if field.name in self.follow_m2m:
                min_count, max_count = self.follow_m2m[field.name]
                return generators.InstanceSelector(
                    get_remote_field_to(field),
                    limit_choices_to=get_remote_field(field).limit_choices_to,
                    min_count=min_count,
                    max_count=max_count,
                    **kwargs)
            if field.blank or field.null:
                return generators.StaticGenerator([])
            raise CreateInstanceError(
                u'Cannot assign instances of "%s" to ManyToManyField "%s". '
                u'Provide either "follow_m2m" or "generate_m2m" argument.' % (
                    '%s.%s' % (
                        get_remote_field_to(field)._meta.app_label,
                        get_remote_field_to(field)._meta.object_name,
                    ),
                    field.name,
            ))
        if isinstance(field, fields.FilePathField):
            return generators.FilePathGenerator(
                path=field.path, match=field.match, recursive=field.recursive,
                max_length=field.max_length, **kwargs)
        if isinstance(field, fields.CharField):
            if isinstance(field, fields.SlugField):
                generator = generators.SlugGenerator
            elif isinstance(field, fields.EmailField):
                return generators.EmailGenerator(
                    max_length=min(field.max_length, 30))
            elif isinstance(field, fields.URLField):
                return generators.URLGenerator(
                    max_length=min(field.max_length, 25))
            elif field.max_length > 15:
                return generators.LoremSentenceGenerator(
                    common=False,
                    max_length=field.max_length)
            else:
                generator = generators.StringGenerator
            return generator(max_length=field.max_length)
        if isinstance(field, fields.DecimalField):
            return generators.DecimalGenerator(
                decimal_places=field.decimal_places,
                max_digits=field.max_digits)
        if hasattr(fields, 'BigIntegerField'):
            if isinstance(field, fields.BigIntegerField):
                return generators.IntegerGenerator(
                    min_value=-field.MAX_BIGINT - 1,
                    max_value=field.MAX_BIGINT,
                    **kwargs)
        if isinstance(field, ImageField):
            return generators.ImageGenerator(storage=field.storage, **kwargs)
        for field_class, generator in self.field_to_generator.items():
            if isinstance(field, field_class):
                return generator(**kwargs)
        return None
Beispiel #10
0
class MyModelAutoFixture(AutoFixture):
    field_values = {
        'title': generators.CallableGenerator(generate_string),
    }