From 824c6e01f91dcb07d16f51578300da3c99b6a336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Barrois?= Date: Wed, 23 Dec 2020 18:10:07 +0100 Subject: [PATCH] Switch away from ParameteredDeclaration Now that BaseDeclaration handles arbitrary kwargs as a set of default parameters for the declaration (and exposes them through its `unroll_context` default), the ParameteredDeclaration is no longer required. --- factory/declarations.py | 8 ++++---- factory/django.py | 6 +++--- factory/faker.py | 8 ++++---- tests/test_faker.py | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/factory/declarations.py b/factory/declarations.py index 26837b83..e7791be9 100644 --- a/factory/declarations.py +++ b/factory/declarations.py @@ -377,7 +377,7 @@ def __repr__(self): return f'<_FactoryImport: {self.factory.__class__}>' -class SubFactory(ParameteredAttribute): +class SubFactory(BaseDeclaration): """Base class for attributes based upon a sub-factory. Attributes: @@ -399,7 +399,7 @@ def get_factory(self): """Retrieve the wrapped factory.Factory subclass.""" return self.factory_wrapper.get() - def generate(self, step, params): + def evaluate(self, instance, step, extra): """Evaluate the current definition and fill its attributes. Args: @@ -411,11 +411,11 @@ def generate(self, step, params): logger.debug( "SubFactory: Instantiating %s.%s(%s), create=%r", subfactory.__module__, subfactory.__name__, - utils.log_pprint(kwargs=params), + utils.log_pprint(kwargs=extra), step, ) force_sequence = step.sequence if self.FORCE_SEQUENCE else None - return step.recurse(subfactory, params, force_sequence=force_sequence) + return step.recurse(subfactory, extra, force_sequence=force_sequence) class Dict(SubFactory): diff --git a/factory/django.py b/factory/django.py index bcbc4b81..9e8954a3 100644 --- a/factory/django.py +++ b/factory/django.py @@ -173,7 +173,7 @@ def _after_postgeneration(cls, instance, create, results=None): instance.save() -class FileField(declarations.ParameteredDeclaration): +class FileField(declarations.BaseDeclaration): """Helper to fill in django.db.models.FileField from a Factory.""" DEFAULT_FILENAME = 'example.dat' @@ -219,9 +219,9 @@ def _make_content(self, params): filename = params.get('filename', default_filename) return filename, content - def generate(self, params): + def evaluate(self, instance, step, extra): """Fill in the field.""" - filename, content = self._make_content(params) + filename, content = self._make_content(extra) return django_files.File(content.file, filename) diff --git a/factory/faker.py b/factory/faker.py index 1c9e28aa..6ed2e28c 100644 --- a/factory/faker.py +++ b/factory/faker.py @@ -21,7 +21,7 @@ class Meta: from . import declarations -class Faker(declarations.ParameteredDeclaration): +class Faker(declarations.BaseDeclaration): """Wrapper for 'faker' values. Args: @@ -42,10 +42,10 @@ def __init__(self, provider, **kwargs): locale=locale, **kwargs) - def generate(self, params): - locale = params.pop('locale') + def evaluate(self, instance, step, extra): + locale = extra.pop('locale') subfaker = self._get_faker(locale) - return subfaker.format(self.provider, **params) + return subfaker.format(self.provider, **extra) _FAKER_REGISTRY = {} _DEFAULT_LOCALE = faker.config.DEFAULT_LOCALE diff --git a/tests/test_faker.py b/tests/test_faker.py index fb9b7218..00355b77 100644 --- a/tests/test_faker.py +++ b/tests/test_faker.py @@ -50,7 +50,7 @@ def _setup_advanced_mock_faker(self, locale=None, **handlers): def test_simple_biased(self): self._setup_mock_faker(name="John Doe") faker_field = factory.Faker('name') - self.assertEqual("John Doe", faker_field.generate({'locale': None})) + self.assertEqual("John Doe", faker_field.evaluate(None, None, {'locale': None})) def test_full_factory(self): class Profile: