pytest::python:如何理解此代码中如何调用闭包
我从一本书中读到了这段代码 在这里,我无法理解语法pytest::python:如何理解此代码中如何调用闭包,python,closures,pytest,Python,Closures,Pytest,我从一本书中读到了这段代码 在这里,我无法理解语法app\u user\u factory(“A”) from typing import List, Optional import pytest from django.contrib.auth.models import User, Group, Permission @pytest.fixture def app_user_group(db) -> Group: group = Group.objects.create(n
app\u user\u factory(“A”)
from typing import List, Optional
import pytest
from django.contrib.auth.models import User, Group, Permission
@pytest.fixture
def app_user_group(db) -> Group:
group = Group.objects.create(name="app_user")
change_user_permissions = Permission.objects.filter(
codename__in=["change_user", "view_user"],
)
group.permissions.add(*change_user_permissions)
return group
@pytest.fixture
def app_user_factory(db, app_user_group: Group):
# Closure
def create_app_user(
username: str,
password: Optional[str] = None,
first_name: Optional[str] = "first name",
last_name: Optional[str] = "last name",
email: Optional[str] = "foo@bar.com",
is_staff: str = False,
is_superuser: str = False,
is_active: str = True,
groups: List[Group] = [],
) -> User:
user = User.objects.create_user(
username=username,
password=password,
first_name=first_name,
last_name=last_name,
email=email,
is_staff=is_staff,
is_superuser=is_superuser,
is_active=is_active,
)
user.groups.add(app_user_group)
# Add additional groups, if provided.
user.groups.add(*groups)
return user
return create_app_user
@pytest.fixture
def user_A(db, app_user_factory) -> User:
return app_user_factory("A")
#Generally as per my understanding the flow is when one run the test is
db = some_test_db_from_pytest
group = app_user_group(db)
closure_function = app_user_factory(db,group) # returns create_app_user function
#then
closure_function('A')
# But here we see directly
app_user_factory("A")