Generate dummy customer data Just out of curiosity, I have this code lying around a personal project in which I will generate lots of dummy customer data.
Here's the code:
faker = Faker()
# Faker.seed(random.randint(0, sys.maxsize))


async def get_random_customer_login(count: int, user: CustomerLogin_PydanticIn) -&gt; list:
    data = []

    for i in range(count):
        plain_email = user.plain_email
        user_ip = user.user_ip
        user_id = user.user_id
        client_id = user.client_id
        result = user.result
        fail_cause = user.fail_cause
        process = user.process
        user_agent = user.user_agent
        device_token = user.device_token
        event_timedate = user.event_timedate

        if plain_email is None:
            plain_email = await get_random_email()

        if user_ip is None:
            user_ip = await get_random_ip_address()

        if user_id is None:
            user_id = uuid.uuid4()

        if client_id is None:
            client_id = await get_random_client_id()

        if result is None:
            result = await get_random_result()

            if 'AUTHENTICATION_SUCCESS' not in result:
                fail_cause = await get_random_fail_cause()
                if fail_cause is None:
                    fail_cause = await get_random_fail_cause()

        if process is None:
            process = await get_random_ub_process()

        if user_agent is None:
            user_agent = await get_random_user_agent()

        if device_token is None:
            device_token = uuid.uuid4()

        if event_timedate is None:
            event_timedate = await get_random_utc_timestamp()

        customer_login = CustomerLogin_PydanticIn(
            event_timedate=event_timedate,
            user_id=user_id,
            device_token=device_token,
            user_ip=user_ip,
            user_agent=user_agent,
            client_id=client_id,
            process=process,
            result=result,
            fail_cause=fail_cause,
            plain_email=plain_email)
        data.append(customer_login)
    return data


async def get_random_email() -&gt; str:
    return faker.ascii_company_email()


async def get_random_ip_address() -&gt; str:
    return faker.ipv4_public()


async def get_random_ub_process() -&gt; str:
    return faker.random_element(elements=PROCESS_LIST)


async def get_random_client_id() -&gt; str:
    return faker.random_element(elements=CLIENT_ID_LIST)


async def get_random_result() -&gt; str:
    return faker.random_element(elements=RESULT_LIST)


async def get_random_fail_cause() -&gt; str:
    return faker.random_element(elements=FAILURE_CAUSE_LIST)


async def get_random_user_agent() -&gt; str:
    return faker.user_agent()


async def get_random_utc_timestamp() -&gt; datetime.datetime:
    return pytz.utc.localize(faker.date_time_this_century())

Basically, this function takes in a count of dummy data to be created, and the CustomerLogin pydantic object. The catch is the function will assign some randomly generated value of fields in CustomerLogin that are not provided.
Anyway, this code works. However, I think there's a lot of room to optimize and should I set faker seed?
I can't come up with many performance improvements, but I have a couple of suggestions for you.
Dummy variable in the for loop
You have a for loop that goes
for i in range(count):
    # ...

but you do nothing with i because you just want to execute the function i times.
A very idiomatic way to say you don't need the variable is by writing
for _ in range(count):

It saves people the time of looking for the usage of i inside the loop.
One item per line, end line with comma on long lists
You have a long list of kwargs that you pass in to CustomerLogin_PydanticIn, and in those cases it is better to have a kwarg per line and ending every line with a comma. You almost do this, you are just missing the last line:
customer_login = CustomerLogin_PydanticIn(
    event_timedate=event_timedate,
    # ...
    plain_email=plain_email,
)

This apparently tiny change will be more git friendly if/when you need to add/remove kwargs.
Short circuiting
Finally, for the sake of completeness (as this was already mentioned in other answers) you can use short-circuiting for the None checks:
plain_email = user.plain_email
if plain_email is None:
    plain_email = await get_random_email()

becomes
plain_email = user.plain_email or await get_random_email()

Double fail cause..?
Your code reads:
        if result is None:
            result = await get_random_result()

            if 'AUTHENTICATION_SUCCESS' not in result:
                fail_cause = await get_random_fail_cause()
                if fail_cause is None:
                    fail_cause = await get_random_fail_cause()

In particular, you do fail_cause = await get_random_fail_cause() and if fail_cause is None, you do the exact same line again, but only once more.
What if fail_cause is still None? Maybe you know that get_random_fail_cause doesn't return two Nones in a row?
Assuming you don't know that for sure, you would probably write a while loop:
fail_cause = None
while fail_cause is None:
    fail_cause = await get_random_fail_cause()