Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: <lambda>() missing 1 required positional argument:

I'm trying to populate my Django project with some random data using factory_boy and faker. However, when I try to create an instance of my UserFactory object I'm getting the error TypeError: () missing 1 required positional argument: 'a'.

It seems to have something to do with the fake_date and date_joined attributes and their lambda functions. A couple of the tutorials I've found have laid out using lambda functions in this way for the Factory objects but it isn't working for me.

import datetime
import factory
import faker
from dataStoreApp.models import Category, Goal, Transaction
from django.contrib.auth.models import User

fake = faker.Faker()


class CategoryFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = Category

    name = factory.Iterator(['Category1', 'Category2',
                             'Category3', 'Category4',
                             'Category5', ], cycle=False)


class UserFactory(factory.django.DjangoModelFactory):
    FACTORY_HIDDEN_ARGS = ('fake_date', )

    class Meta:
        model = User

    fake_date = factory.LazyAttribute(
    lambda a: datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
    date_joined = factory.LazyFunction(lambda a: a.fake_date)
    first_name = factory.LazyAttribute(lambda b: fake.first_name())
    last_name = factory.LazyAttribute(lambda c: fake.last_name())
    email = factory.LazyAttribute(lambda e: 'test' + '@test_email.com')



class GoalFactory(factory.DjangoModelFactory):
    class Meta:
        model = Goal


class TransactionFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Transaction

When running in the python console I get the following errors:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Program Files\Python36\lib\site-packages\factory\base.py", line 568, in create
    return cls._generate(enums.CREATE_STRATEGY, kwargs)
  File "C:\Program Files\Python36\lib\site-packages\factory\base.py", line 505, in _generate
    return step.build()
  File "C:\Program Files\Python36\lib\site-packages\factory\builder.py", line 272, in build
    step.resolve(pre)
  File "C:\Program Files\Python36\lib\site-packages\factory\builder.py", line 221, in resolve
    self.attributes[field_name] = getattr(self.stub, field_name)
  File "C:\Program Files\Python36\lib\site-packages\factory\builder.py", line 363, in __getattr__
    extra=declaration.context,
  File "C:\Program Files\Python36\lib\site-packages\factory\declarations.py", line 59, in evaluate
    return self.function()
TypeError: <lambda>() missing 1 required positional argument: 'a'
like image 655
Efie Avatar asked Dec 03 '22 21:12

Efie


1 Answers

You create function with argument a in code

lambda a: ....

but it seems program expects function without arguments

lambda: ...
like image 134
furas Avatar answered Dec 06 '22 11:12

furas