Type error
Shodiev-Shokhrukh opened this issue · comments
Shodiev Shokhrukh commented
Description
Type error happened when i use my factories in my tests
To Reproduce
Type error happened when i use my factories in my tests
Model / Factory code
"""
agro.apps.financing.models.FinancingPlacement
"""
class Meta:
model = FinancingPlacement
cotton_petition = SubFactory('agro.apps.financing.factories.PetitionPreferentialCreditFactory')
placement = SubFactory('agro.apps.placement.factories.PlacementFactory')
gross_product = Faker('pydecimal', left_digits=16, right_digits=3, positive=True)
price = Faker('pydecimal', left_digits=16, right_digits=3, positive=True)
summa_credit = Faker('pydecimal', left_digits=16, right_digits=3, positive=True)
class FinancingPlacement(FakeRemoveModel):
cotton_petition = models.ForeignKey(
PetitionPreferentialCredit,
related_name="finance_references",
on_delete=models.CASCADE,
null=True,
blank=True,
verbose_name=_("Paxta imtiyozli kredit arizasi"),
)
placement = models.ForeignKey(
"placement.Placement", on_delete=models.CASCADE, null=True, blank=True, verbose_name=_("Ekin joylashuvi")
)
gross_product = models.DecimalField(
_("Yalpi hosil, tn"), decimal_places=3, max_digits=19, null=True, blank=True
)
price = models.DecimalField(
_("Qiymati, ming so'm"), decimal_places=2, max_digits=18, null=True, blank=True
)
summa_credit = models.DecimalField(
_("Talab etiladigan kredit, ming so'm"),
decimal_places=2,
max_digits=15,
null=True,
blank=True,
)
class Meta:
verbose_name = _("Paxta imtiyozli kredit ekin")
verbose_name_plural = _("Paxta imtiyozli kredit ekinlar")
The issue
i dont know why this issue happened before i used factories it didnt happen
def test_full_clean_gross_product_greater_than_placement_normative(self):
> placement = self.factory()
agro/apps/financing/tests/test_models/test_financing_placement.py:24:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/factory/base.py:40: in __call__
return cls.create(**kwargs)
/usr/local/lib/python3.9/site-packages/factory/base.py:528: in create
return cls._generate(enums.CREATE_STRATEGY, kwargs)
/usr/local/lib/python3.9/site-packages/factory/django.py:117: in _generate
return super()._generate(strategy, params)
/usr/local/lib/python3.9/site-packages/factory/base.py:465: in _generate
return step.build()
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/declarations.py:395: in evaluate
return step.recurse(subfactory, extra, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:216: in recurse
return builder.build(parent_step=self, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/declarations.py:395: in evaluate
return step.recurse(subfactory, extra, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:216: in recurse
return builder.build(parent_step=self, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/faker.py:48: in evaluate
return subfaker.format(self.provider, **extra)
/usr/local/lib/python3.9/site-packages/faker/generator.py:88: in format
return self.get_formatter(formatter)(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <faker.generator.Generator object at 0x79af5303dee0>
formatter = <built-in method date of datetime.datetime object at 0x79af5192cc90>
def get_formatter(self, formatter: str) -> Callable:
try:
> return getattr(self, formatter)
E TypeError: getattr(): attribute name must be string
/usr/local/lib/python3.9/site-packages/faker/generator.py:92: TypeError
agro/apps/financing/tests/test_models/test_financing_placement.py::TestFinancingPlacement.test_full_clean_gross_product_greater_than_placement_normative ⨯50% █████
――――――――――――――――――――――――――――――― TestFinancingPlacement.test_save_price_calculation ――――――――――――――――――――――――――――――――
self = <agro.apps.financing.tests.test_models.test_financing_placement.TestFinancingPlacement object at 0x79af53394040>
def test_save_price_calculation(self):
> placement = self.factory()
agro/apps/financing/tests/test_models/test_financing_placement.py:31:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/factory/base.py:40: in __call__
return cls.create(**kwargs)
/usr/local/lib/python3.9/site-packages/factory/base.py:528: in create
return cls._generate(enums.CREATE_STRATEGY, kwargs)
/usr/local/lib/python3.9/site-packages/factory/django.py:117: in _generate
return super()._generate(strategy, params)
/usr/local/lib/python3.9/site-packages/factory/base.py:465: in _generate
return step.build()
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/declarations.py:395: in evaluate
return step.recurse(subfactory, extra, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:216: in recurse
return builder.build(parent_step=self, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/declarations.py:395: in evaluate
return step.recurse(subfactory, extra, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:216: in recurse
return builder.build(parent_step=self, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/faker.py:48: in evaluate
return subfaker.format(self.provider, **extra)
/usr/local/lib/python3.9/site-packages/faker/generator.py:88: in format
return self.get_formatter(formatter)(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <faker.generator.Generator object at 0x79af5303dee0>
formatter = <built-in method date of datetime.datetime object at 0x79af5192cc90>
def get_formatter(self, formatter: str) -> Callable:
try:
> return getattr(self, formatter)
E TypeError: getattr(): attribute name must be string
/usr/local/lib/python3.9/site-packages/faker/generator.py:92: TypeError
agro/apps/financing/tests/test_models/test_financing_placement.py::TestFinancingPlacement.test_save_price_calculation ⨯75% ███████▌
―――――――――――――――――――――――――――― TestFinancingPlacement.test_save_summa_credit_calculation ――――――――――――――――――――――――――――
self = <agro.apps.financing.tests.test_models.test_financing_placement.TestFinancingPlacement object at 0x79af53394430>
def test_save_summa_credit_calculation(self):
> placement = self.factory()
agro/apps/financing/tests/test_models/test_financing_placement.py:37:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/factory/base.py:40: in __call__
return cls.create(**kwargs)
/usr/local/lib/python3.9/site-packages/factory/base.py:528: in create
return cls._generate(enums.CREATE_STRATEGY, kwargs)
/usr/local/lib/python3.9/site-packages/factory/django.py:117: in _generate
return super()._generate(strategy, params)
/usr/local/lib/python3.9/site-packages/factory/base.py:465: in _generate
return step.build()
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/declarations.py:395: in evaluate
return step.recurse(subfactory, extra, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:216: in recurse
return builder.build(parent_step=self, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/declarations.py:395: in evaluate
return step.recurse(subfactory, extra, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:216: in recurse
return builder.build(parent_step=self, force_sequence=force_sequence)
/usr/local/lib/python3.9/site-packages/factory/builder.py:258: in build
step.resolve(pre)
/usr/local/lib/python3.9/site-packages/factory/builder.py:199: in resolve
self.attributes[field_name] = getattr(self.stub, field_name)
/usr/local/lib/python3.9/site-packages/factory/builder.py:344: in __getattr__
value = value.evaluate_pre(
/usr/local/lib/python3.9/site-packages/factory/declarations.py:48: in evaluate_pre
return self.evaluate(instance, step, context)
/usr/local/lib/python3.9/site-packages/factory/faker.py:48: in evaluate
return subfaker.format(self.provider, **extra)
/usr/local/lib/python3.9/site-packages/faker/generator.py:88: in format
return self.get_formatter(formatter)(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <faker.generator.Generator object at 0x79af5303dee0>
formatter = <built-in method date of datetime.datetime object at 0x79af5192cc90>
def get_formatter(self, formatter: str) -> Callable:
try:
> return getattr(self, formatter)
E TypeError: getattr(): attribute name must be string
/usr/local/lib/python3.9/site-packages/faker/generator.py:92: TypeError
Notes
Add any notes you feel relevant here :)
Raphaël Barrois commented
Can you provide us with the definition of your factory?
It looks like you're passing a non-string value to some factory.Faker(...)
call; those expect the name of one of Faker's providers.
Raphaël Barrois commented
I'm going to close this, as we don't have enough details to move forward.
Feel free to reopen the issue if you are able to provide those!